Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(111)

Side by Side Diff: content/browser/android/synchronous_compositor_host.cc

Issue 1769913003: sync compositor: Add output_surface_id (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove debug code Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/android/synchronous_compositor_host.h" 5 #include "content/browser/android/synchronous_compositor_host.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/containers/hash_tables.h" 9 #include "base/containers/hash_tables.h"
10 #include "base/memory/shared_memory.h" 10 #include "base/memory/shared_memory.h"
(...skipping 24 matching lines...) Expand all
35 : rwhva_(rwhva), 35 : rwhva_(rwhva),
36 client_(client), 36 client_(client),
37 ui_task_runner_( 37 ui_task_runner_(
38 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI)), 38 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI)),
39 routing_id_(rwhva_->GetRenderWidgetHost()->GetRoutingID()), 39 routing_id_(rwhva_->GetRenderWidgetHost()->GetRoutingID()),
40 sender_(rwhva_->GetRenderWidgetHost()), 40 sender_(rwhva_->GetRenderWidgetHost()),
41 async_input_(async_input), 41 async_input_(async_input),
42 use_in_process_zero_copy_software_draw_(use_in_proc_software_draw), 42 use_in_process_zero_copy_software_draw_(use_in_proc_software_draw),
43 is_active_(false), 43 is_active_(false),
44 bytes_limit_(0u), 44 bytes_limit_(0u),
45 output_surface_id_from_last_draw_(0u),
45 root_scroll_offset_updated_by_browser_(false), 46 root_scroll_offset_updated_by_browser_(false),
46 renderer_param_version_(0u), 47 renderer_param_version_(0u),
47 need_animate_scroll_(false), 48 need_animate_scroll_(false),
48 need_invalidate_count_(0u), 49 need_invalidate_count_(0u),
49 need_begin_frame_(false), 50 need_begin_frame_(false),
50 did_activate_pending_tree_count_(0u), 51 did_activate_pending_tree_count_(0u),
51 weak_ptr_factory_(this) { 52 weak_ptr_factory_(this) {
52 client_->DidInitializeCompositor(this); 53 client_->DidInitializeCompositor(this);
53 } 54 }
54 55
(...skipping 10 matching lines...) Expand all
65 IPC_MESSAGE_HANDLER(SyncCompositorHostMsg_OverScroll, OnOverScroll) 66 IPC_MESSAGE_HANDLER(SyncCompositorHostMsg_OverScroll, OnOverScroll)
66 IPC_MESSAGE_UNHANDLED(handled = false) 67 IPC_MESSAGE_UNHANDLED(handled = false)
67 IPC_END_MESSAGE_MAP() 68 IPC_END_MESSAGE_MAP()
68 return handled; 69 return handled;
69 } 70 }
70 71
71 void SynchronousCompositorHost::DidBecomeCurrent() { 72 void SynchronousCompositorHost::DidBecomeCurrent() {
72 client_->DidBecomeCurrent(this); 73 client_->DidBecomeCurrent(this);
73 } 74 }
74 75
75 scoped_ptr<cc::CompositorFrame> SynchronousCompositorHost::DemandDrawHw( 76 SynchronousCompositor::Frame SynchronousCompositorHost::DemandDrawHw(
76 const gfx::Size& surface_size, 77 const gfx::Size& surface_size,
77 const gfx::Transform& transform, 78 const gfx::Transform& transform,
78 const gfx::Rect& viewport, 79 const gfx::Rect& viewport,
79 const gfx::Rect& clip, 80 const gfx::Rect& clip,
80 const gfx::Rect& viewport_rect_for_tile_priority, 81 const gfx::Rect& viewport_rect_for_tile_priority,
81 const gfx::Transform& transform_for_tile_priority) { 82 const gfx::Transform& transform_for_tile_priority) {
82 SyncCompositorDemandDrawHwParams params(surface_size, transform, viewport, 83 SyncCompositorDemandDrawHwParams params(surface_size, transform, viewport,
83 clip, viewport_rect_for_tile_priority, 84 clip, viewport_rect_for_tile_priority,
84 transform_for_tile_priority); 85 transform_for_tile_priority);
85 scoped_ptr<cc::CompositorFrame> frame(new cc::CompositorFrame); 86 SynchronousCompositor::Frame frame;
87 frame.frame.reset(new cc::CompositorFrame);
86 SyncCompositorCommonBrowserParams common_browser_params; 88 SyncCompositorCommonBrowserParams common_browser_params;
87 PopulateCommonParams(&common_browser_params); 89 PopulateCommonParams(&common_browser_params);
88 SyncCompositorCommonRendererParams common_renderer_params; 90 SyncCompositorCommonRendererParams common_renderer_params;
89 if (!sender_->Send(new SyncCompositorMsg_DemandDrawHw( 91 if (!sender_->Send(new SyncCompositorMsg_DemandDrawHw(
90 routing_id_, common_browser_params, params, &common_renderer_params, 92 routing_id_, common_browser_params, params, &common_renderer_params,
91 frame.get()))) { 93 &frame.output_surface_id, frame.frame.get()))) {
92 return nullptr; 94 return SynchronousCompositor::Frame();
93 } 95 }
94 ProcessCommonParams(common_renderer_params); 96 ProcessCommonParams(common_renderer_params);
95 if (!frame->delegated_frame_data) { 97 if (!frame.frame->delegated_frame_data) {
96 // This can happen if compositor did not swap in this draw. 98 // This can happen if compositor did not swap in this draw.
97 frame.reset(); 99 frame.frame.reset();
98 } 100 }
99 if (frame) 101 if (frame.frame) {
100 UpdateFrameMetaData(frame->metadata); 102 UpdateFrameMetaData(frame.frame->metadata);
103 if (output_surface_id_from_last_draw_ != frame.output_surface_id)
104 returned_resources_.clear();
105 output_surface_id_from_last_draw_ = frame.output_surface_id;
106 }
101 return frame; 107 return frame;
102 } 108 }
103 109
104 void SynchronousCompositorHost::UpdateFrameMetaData( 110 void SynchronousCompositorHost::UpdateFrameMetaData(
105 const cc::CompositorFrameMetadata& frame_metadata) { 111 const cc::CompositorFrameMetadata& frame_metadata) {
106 rwhva_->SynchronousFrameMetadata(frame_metadata); 112 rwhva_->SynchronousFrameMetadata(frame_metadata);
107 } 113 }
108 114
109 namespace { 115 namespace {
110 116
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 software_draw_shm_ = std::move(software_draw_shm); 268 software_draw_shm_ = std::move(software_draw_shm);
263 ProcessCommonParams(common_renderer_params); 269 ProcessCommonParams(common_renderer_params);
264 } 270 }
265 271
266 void SynchronousCompositorHost::SendZeroMemory() { 272 void SynchronousCompositorHost::SendZeroMemory() {
267 // No need to check return value. 273 // No need to check return value.
268 sender_->Send(new SyncCompositorMsg_ZeroSharedMemory(routing_id_)); 274 sender_->Send(new SyncCompositorMsg_ZeroSharedMemory(routing_id_));
269 } 275 }
270 276
271 void SynchronousCompositorHost::ReturnResources( 277 void SynchronousCompositorHost::ReturnResources(
278 uint32_t output_surface_id,
272 const cc::CompositorFrameAck& frame_ack) { 279 const cc::CompositorFrameAck& frame_ack) {
280 if (output_surface_id_from_last_draw_ != output_surface_id)
no sievers 2016/03/21 19:56:12 nit: maybe worth a comment saying that in that cas
boliu 2016/03/21 21:35:49 Done.
281 return;
273 returned_resources_.insert(returned_resources_.end(), 282 returned_resources_.insert(returned_resources_.end(),
274 frame_ack.resources.begin(), 283 frame_ack.resources.begin(),
275 frame_ack.resources.end()); 284 frame_ack.resources.end());
276 } 285 }
277 286
278 void SynchronousCompositorHost::SetMemoryPolicy(size_t bytes_limit) { 287 void SynchronousCompositorHost::SetMemoryPolicy(size_t bytes_limit) {
279 if (bytes_limit_ == bytes_limit) 288 if (bytes_limit_ == bytes_limit)
280 return; 289 return;
281 size_t current_bytes_limit = bytes_limit_; 290 size_t current_bytes_limit = bytes_limit_;
282 bytes_limit_ = bytes_limit; 291 bytes_limit_ = bytes_limit;
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
382 const DidOverscrollParams& over_scroll_params) { 391 const DidOverscrollParams& over_scroll_params) {
383 ProcessCommonParams(params); 392 ProcessCommonParams(params);
384 DidOverscroll(over_scroll_params); 393 DidOverscroll(over_scroll_params);
385 } 394 }
386 395
387 void SynchronousCompositorHost::PopulateCommonParams( 396 void SynchronousCompositorHost::PopulateCommonParams(
388 SyncCompositorCommonBrowserParams* params) { 397 SyncCompositorCommonBrowserParams* params) {
389 DCHECK(params); 398 DCHECK(params);
390 DCHECK(params->ack.resources.empty()); 399 DCHECK(params->ack.resources.empty());
391 params->bytes_limit = bytes_limit_; 400 params->bytes_limit = bytes_limit_;
401 params->output_surface_id_for_returned_resources =
402 output_surface_id_from_last_draw_;
392 params->ack.resources.swap(returned_resources_); 403 params->ack.resources.swap(returned_resources_);
393 if (root_scroll_offset_updated_by_browser_) { 404 if (root_scroll_offset_updated_by_browser_) {
394 params->root_scroll_offset = root_scroll_offset_; 405 params->root_scroll_offset = root_scroll_offset_;
395 params->update_root_scroll_offset = root_scroll_offset_updated_by_browser_; 406 params->update_root_scroll_offset = root_scroll_offset_updated_by_browser_;
396 root_scroll_offset_updated_by_browser_ = false; 407 root_scroll_offset_updated_by_browser_ = false;
397 } 408 }
398 params->begin_frame_source_paused = !is_active_; 409 params->begin_frame_source_paused = !is_active_;
399 410
400 weak_ptr_factory_.InvalidateWeakPtrs(); 411 weak_ptr_factory_.InvalidateWeakPtrs();
401 } 412 }
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
436 params.scrollable_size, params.page_scale_factor, 447 params.scrollable_size, params.page_scale_factor,
437 params.min_page_scale_factor, params.max_page_scale_factor); 448 params.min_page_scale_factor, params.max_page_scale_factor);
438 } 449 }
439 } 450 }
440 451
441 void SynchronousCompositorHost::UpdateNeedsBeginFrames() { 452 void SynchronousCompositorHost::UpdateNeedsBeginFrames() {
442 rwhva_->OnSetNeedsBeginFrames(is_active_ && need_begin_frame_); 453 rwhva_->OnSetNeedsBeginFrames(is_active_ && need_begin_frame_);
443 } 454 }
444 455
445 } // namespace content 456 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698