Present time is available to apps, but is not currently stored inside FrameInfo. In this CL, we add a location for storing the present time inside FrameInfo. Currently, the metrics reporter is triggered after the buffer is sent to SurfaceFlinger. That means, metrics for anything that happens after gpu draw completes are currently not available. In a future CL, we will populate the 'presentTime' field. In a future CL, we will register a metrics observer inside ViewRootImpl in order to send this data to InputDispatcher. This will enable end-to-end touch latency metrics collection. Bug: 169866723 Test: printed present time inside FrameTimeline.cpp (surfaceflinger side) and compared to the values printed inside a metrics observer registered in ViewRootImpl (not done in this CL) Test: atest ViewFrameInfoTest Change-Id: I7d0f8c5d7b5a2572abdc4e107123e8938a36f582
55 lines
1.6 KiB
C++
55 lines
1.6 KiB
C++
/*
|
|
* Copyright (C) 2015 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
#include "FrameInfo.h"
|
|
|
|
#include <cstring>
|
|
|
|
namespace android {
|
|
namespace uirenderer {
|
|
|
|
const std::array FrameInfoNames{
|
|
"Flags",
|
|
"FrameTimelineVsyncId",
|
|
"IntendedVsync",
|
|
"Vsync",
|
|
"InputEventId",
|
|
"HandleInputStart",
|
|
"AnimationStart",
|
|
"PerformTraversalsStart",
|
|
"DrawStart",
|
|
"FrameDeadline",
|
|
"SyncQueued",
|
|
"SyncStart",
|
|
"IssueDrawCommandsStart",
|
|
"SwapBuffers",
|
|
"FrameCompleted",
|
|
"DequeueBufferDuration",
|
|
"QueueBufferDuration",
|
|
"GpuCompleted",
|
|
"SwapBuffersCompleted",
|
|
"DisplayPresentTime",
|
|
};
|
|
|
|
static_assert(static_cast<int>(FrameInfoIndex::NumIndexes) == 20,
|
|
"Must update value in FrameMetrics.java#FRAME_STATS_COUNT (and here)");
|
|
|
|
void FrameInfo::importUiThreadInfo(int64_t* info) {
|
|
memcpy(mFrameInfo, info, UI_THREAD_FRAME_INFO_SIZE * sizeof(int64_t));
|
|
}
|
|
|
|
} /* namespace uirenderer */
|
|
} /* namespace android */
|