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

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: fix unittests compile 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 22 matching lines...) Expand all
33 bool use_in_proc_software_draw) 33 bool use_in_proc_software_draw)
34 : rwhva_(rwhva), 34 : rwhva_(rwhva),
35 client_(client), 35 client_(client),
36 ui_task_runner_( 36 ui_task_runner_(
37 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI)), 37 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI)),
38 routing_id_(rwhva_->GetRenderWidgetHost()->GetRoutingID()), 38 routing_id_(rwhva_->GetRenderWidgetHost()->GetRoutingID()),
39 sender_(rwhva_->GetRenderWidgetHost()), 39 sender_(rwhva_->GetRenderWidgetHost()),
40 use_in_process_zero_copy_software_draw_(use_in_proc_software_draw), 40 use_in_process_zero_copy_software_draw_(use_in_proc_software_draw),
41 is_active_(false), 41 is_active_(false),
42 bytes_limit_(0u), 42 bytes_limit_(0u),
43 current_output_surface_id_(0u),
hush (inactive) 2016/03/08 23:55:49 Not sure where we get the correct value of current
boliu 2016/03/09 00:29:59 Yes
hush (inactive) 2016/03/09 02:36:17 yeah. Renaming the variable name to indicate this
43 root_scroll_offset_updated_by_browser_(false), 44 root_scroll_offset_updated_by_browser_(false),
44 renderer_param_version_(0u), 45 renderer_param_version_(0u),
45 need_animate_scroll_(false), 46 need_animate_scroll_(false),
46 need_invalidate_count_(0u), 47 need_invalidate_count_(0u),
47 need_begin_frame_(false), 48 need_begin_frame_(false),
48 did_activate_pending_tree_count_(0u), 49 did_activate_pending_tree_count_(0u),
49 weak_ptr_factory_(this) { 50 weak_ptr_factory_(this) {
50 client_->DidInitializeCompositor(this); 51 client_->DidInitializeCompositor(this);
51 } 52 }
52 53
(...skipping 10 matching lines...) Expand all
63 IPC_MESSAGE_HANDLER(SyncCompositorHostMsg_OverScroll, OnOverScroll) 64 IPC_MESSAGE_HANDLER(SyncCompositorHostMsg_OverScroll, OnOverScroll)
64 IPC_MESSAGE_UNHANDLED(handled = false) 65 IPC_MESSAGE_UNHANDLED(handled = false)
65 IPC_END_MESSAGE_MAP() 66 IPC_END_MESSAGE_MAP()
66 return handled; 67 return handled;
67 } 68 }
68 69
69 void SynchronousCompositorHost::DidBecomeCurrent() { 70 void SynchronousCompositorHost::DidBecomeCurrent() {
70 client_->DidBecomeCurrent(this); 71 client_->DidBecomeCurrent(this);
71 } 72 }
72 73
73 scoped_ptr<cc::CompositorFrame> SynchronousCompositorHost::DemandDrawHw( 74 SynchronousCompositor::Frame SynchronousCompositorHost::DemandDrawHw(
74 const gfx::Size& surface_size, 75 const gfx::Size& surface_size,
75 const gfx::Transform& transform, 76 const gfx::Transform& transform,
76 const gfx::Rect& viewport, 77 const gfx::Rect& viewport,
77 const gfx::Rect& clip, 78 const gfx::Rect& clip,
78 const gfx::Rect& viewport_rect_for_tile_priority, 79 const gfx::Rect& viewport_rect_for_tile_priority,
79 const gfx::Transform& transform_for_tile_priority) { 80 const gfx::Transform& transform_for_tile_priority) {
80 SyncCompositorDemandDrawHwParams params(surface_size, transform, viewport, 81 SyncCompositorDemandDrawHwParams params(surface_size, transform, viewport,
81 clip, viewport_rect_for_tile_priority, 82 clip, viewport_rect_for_tile_priority,
82 transform_for_tile_priority); 83 transform_for_tile_priority);
83 scoped_ptr<cc::CompositorFrame> frame(new cc::CompositorFrame); 84 SynchronousCompositor::Frame frame;
85 frame.frame.reset(new cc::CompositorFrame);
84 SyncCompositorCommonBrowserParams common_browser_params; 86 SyncCompositorCommonBrowserParams common_browser_params;
85 PopulateCommonParams(&common_browser_params); 87 PopulateCommonParams(&common_browser_params);
86 SyncCompositorCommonRendererParams common_renderer_params; 88 SyncCompositorCommonRendererParams common_renderer_params;
87 if (!sender_->Send(new SyncCompositorMsg_DemandDrawHw( 89 if (!sender_->Send(new SyncCompositorMsg_DemandDrawHw(
88 routing_id_, common_browser_params, params, &common_renderer_params, 90 routing_id_, common_browser_params, params, &common_renderer_params,
89 frame.get()))) { 91 &frame.output_surface_id, frame.frame.get()))) {
90 return nullptr; 92 return SynchronousCompositor::Frame();
91 } 93 }
92 ProcessCommonParams(common_renderer_params); 94 ProcessCommonParams(common_renderer_params);
93 if (!frame->delegated_frame_data) { 95 if (!frame.frame->delegated_frame_data) {
94 // This can happen if compositor did not swap in this draw. 96 // This can happen if compositor did not swap in this draw.
95 frame.reset(); 97 frame.frame.reset();
96 } 98 }
97 if (frame) 99 if (frame.frame)
98 UpdateFrameMetaData(frame->metadata); 100 UpdateFrameMetaData(frame.frame->metadata);
99 return frame; 101 return frame;
100 } 102 }
101 103
102 void SynchronousCompositorHost::UpdateFrameMetaData( 104 void SynchronousCompositorHost::UpdateFrameMetaData(
103 const cc::CompositorFrameMetadata& frame_metadata) { 105 const cc::CompositorFrameMetadata& frame_metadata) {
104 rwhva_->SynchronousFrameMetadata(frame_metadata); 106 rwhva_->SynchronousFrameMetadata(frame_metadata);
105 } 107 }
106 108
107 namespace { 109 namespace {
108 110
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 software_draw_shm_ = std::move(software_draw_shm); 262 software_draw_shm_ = std::move(software_draw_shm);
261 ProcessCommonParams(common_renderer_params); 263 ProcessCommonParams(common_renderer_params);
262 } 264 }
263 265
264 void SynchronousCompositorHost::SendZeroMemory() { 266 void SynchronousCompositorHost::SendZeroMemory() {
265 // No need to check return value. 267 // No need to check return value.
266 sender_->Send(new SyncCompositorMsg_ZeroSharedMemory(routing_id_)); 268 sender_->Send(new SyncCompositorMsg_ZeroSharedMemory(routing_id_));
267 } 269 }
268 270
269 void SynchronousCompositorHost::ReturnResources( 271 void SynchronousCompositorHost::ReturnResources(
272 uint32_t output_surface_id,
270 const cc::CompositorFrameAck& frame_ack) { 273 const cc::CompositorFrameAck& frame_ack) {
274 if (current_output_surface_id_ != output_surface_id) {
275 returned_resources_.clear();
276 current_output_surface_id_ = output_surface_id;
277 }
271 returned_resources_.insert(returned_resources_.end(), 278 returned_resources_.insert(returned_resources_.end(),
272 frame_ack.resources.begin(), 279 frame_ack.resources.begin(),
273 frame_ack.resources.end()); 280 frame_ack.resources.end());
274 } 281 }
275 282
276 void SynchronousCompositorHost::SetMemoryPolicy(size_t bytes_limit) { 283 void SynchronousCompositorHost::SetMemoryPolicy(size_t bytes_limit) {
277 if (bytes_limit_ == bytes_limit) 284 if (bytes_limit_ == bytes_limit)
278 return; 285 return;
279 size_t current_bytes_limit = bytes_limit_; 286 size_t current_bytes_limit = bytes_limit_;
280 bytes_limit_ = bytes_limit; 287 bytes_limit_ = bytes_limit;
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 client_->DidOverscroll(over_scroll_params.accumulated_overscroll, 380 client_->DidOverscroll(over_scroll_params.accumulated_overscroll,
374 over_scroll_params.latest_overscroll_delta, 381 over_scroll_params.latest_overscroll_delta,
375 over_scroll_params.current_fling_velocity); 382 over_scroll_params.current_fling_velocity);
376 } 383 }
377 384
378 void SynchronousCompositorHost::PopulateCommonParams( 385 void SynchronousCompositorHost::PopulateCommonParams(
379 SyncCompositorCommonBrowserParams* params) { 386 SyncCompositorCommonBrowserParams* params) {
380 DCHECK(params); 387 DCHECK(params);
381 DCHECK(params->ack.resources.empty()); 388 DCHECK(params->ack.resources.empty());
382 params->bytes_limit = bytes_limit_; 389 params->bytes_limit = bytes_limit_;
390 params->output_surface_id = current_output_surface_id_;
383 params->ack.resources.swap(returned_resources_); 391 params->ack.resources.swap(returned_resources_);
384 if (root_scroll_offset_updated_by_browser_) { 392 if (root_scroll_offset_updated_by_browser_) {
385 params->root_scroll_offset = root_scroll_offset_; 393 params->root_scroll_offset = root_scroll_offset_;
386 params->update_root_scroll_offset = root_scroll_offset_updated_by_browser_; 394 params->update_root_scroll_offset = root_scroll_offset_updated_by_browser_;
387 root_scroll_offset_updated_by_browser_ = false; 395 root_scroll_offset_updated_by_browser_ = false;
388 } 396 }
389 params->begin_frame_source_paused = !is_active_; 397 params->begin_frame_source_paused = !is_active_;
390 398
391 weak_ptr_factory_.InvalidateWeakPtrs(); 399 weak_ptr_factory_.InvalidateWeakPtrs();
392 } 400 }
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 params.scrollable_size, params.page_scale_factor, 435 params.scrollable_size, params.page_scale_factor,
428 params.min_page_scale_factor, params.max_page_scale_factor); 436 params.min_page_scale_factor, params.max_page_scale_factor);
429 } 437 }
430 } 438 }
431 439
432 void SynchronousCompositorHost::UpdateNeedsBeginFrames() { 440 void SynchronousCompositorHost::UpdateNeedsBeginFrames() {
433 rwhva_->OnSetNeedsBeginFrames(is_active_ && need_begin_frame_); 441 rwhva_->OnSetNeedsBeginFrames(is_active_ && need_begin_frame_);
434 } 442 }
435 443
436 } // namespace content 444 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698