| Index: content/browser/renderer_host/render_widget_host_impl.cc
|
| diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
|
| index a5894b284dd1ba0e14fcb0998797598ec3eb1b0b..1b71d32318fb41d2f2114c1acb55617c17a52217 100644
|
| --- a/content/browser/renderer_host/render_widget_host_impl.cc
|
| +++ b/content/browser/renderer_host/render_widget_host_impl.cc
|
| @@ -95,6 +95,10 @@ bool g_check_for_pending_resize_ack = true;
|
| // This timeout impacts the "choppiness" of our window resize perf.
|
| const int kPaintMsgTimeoutMS = 50;
|
|
|
| +// Maximal number of LatencyInfo that can be contained in
|
| +// ViewHostMsg_CompositorSurfaceBuffersSwapped_Params.
|
| +const unsigned int kMaxLatencyInfoNumber = 100;
|
| +
|
| typedef std::pair<int32, int32> RenderWidgetHostID;
|
| typedef base::hash_map<RenderWidgetHostID, RenderWidgetHostImpl*>
|
| RoutingIDWidgetMap;
|
| @@ -1469,6 +1473,7 @@ void RenderWidgetHostImpl::OnCompositorSurfaceBuffersSwapped(
|
| const ViewHostMsg_CompositorSurfaceBuffersSwapped_Params& params) {
|
| TRACE_EVENT0("renderer_host",
|
| "RenderWidgetHostImpl::OnCompositorSurfaceBuffersSwapped");
|
| + CHECK(params.latency_info.size() < kMaxLatencyInfoNumber);
|
| if (!view_) {
|
| AcceleratedSurfaceMsg_BufferPresented_Params ack_params;
|
| ack_params.sync_point = 0;
|
| @@ -2450,26 +2455,27 @@ void RenderWidgetHostImpl::WindowSnapshotReachedScreen(int snapshot_id) {
|
|
|
| // static
|
| void RenderWidgetHostImpl::CompositorFrameDrawn(
|
| - const ui::LatencyInfo& latency_info) {
|
| - std::set<RenderWidgetHostImpl*> rwhi_set;
|
| -
|
| - for (ui::LatencyInfo::LatencyMap::const_iterator b =
|
| - latency_info.latency_components.begin();
|
| - b != latency_info.latency_components.end();
|
| - ++b) {
|
| - if (b->first.first == ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT ||
|
| - b->first.first == ui::WINDOW_SNAPSHOT_FRAME_NUMBER_COMPONENT) {
|
| - // Matches with GetLatencyComponentId
|
| - int routing_id = b->first.second & 0xffffffff;
|
| - int process_id = (b->first.second >> 32) & 0xffffffff;
|
| - RenderWidgetHost* rwh =
|
| - RenderWidgetHost::FromID(process_id, routing_id);
|
| - if (!rwh) {
|
| - continue;
|
| + const std::vector<ui::LatencyInfo>& latency_info) {
|
| + for (size_t i = 0; i < latency_info.size(); i++) {
|
| + std::set<RenderWidgetHostImpl*> rwhi_set;
|
| + for (ui::LatencyInfo::LatencyMap::const_iterator b =
|
| + latency_info[i].latency_components.begin();
|
| + b != latency_info[i].latency_components.end();
|
| + ++b) {
|
| + if (b->first.first == ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT ||
|
| + b->first.first == ui::WINDOW_SNAPSHOT_FRAME_NUMBER_COMPONENT) {
|
| + // Matches with GetLatencyComponentId
|
| + int routing_id = b->first.second & 0xffffffff;
|
| + int process_id = (b->first.second >> 32) & 0xffffffff;
|
| + RenderWidgetHost* rwh =
|
| + RenderWidgetHost::FromID(process_id, routing_id);
|
| + if (!rwh) {
|
| + continue;
|
| + }
|
| + RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(rwh);
|
| + if (rwhi_set.insert(rwhi).second)
|
| + rwhi->FrameSwapped(latency_info[i]);
|
| }
|
| - RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(rwh);
|
| - if (rwhi_set.insert(rwhi).second)
|
| - rwhi->FrameSwapped(latency_info);
|
| }
|
| }
|
| }
|
|
|