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

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

Issue 2096493002: Make cc::CompositorFrames movable [Part 1 of 2] (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Make CompositorFrameMetadata movable Created 4 years, 5 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/command_line.h" 9 #include "base/command_line.h"
10 #include "base/containers/hash_tables.h" 10 #include "base/containers/hash_tables.h"
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 const gfx::Size& surface_size, 99 const gfx::Size& surface_size,
100 const gfx::Transform& transform, 100 const gfx::Transform& transform,
101 const gfx::Rect& viewport, 101 const gfx::Rect& viewport,
102 const gfx::Rect& clip, 102 const gfx::Rect& clip,
103 const gfx::Rect& viewport_rect_for_tile_priority, 103 const gfx::Rect& viewport_rect_for_tile_priority,
104 const gfx::Transform& transform_for_tile_priority) { 104 const gfx::Transform& transform_for_tile_priority) {
105 SyncCompositorDemandDrawHwParams params(surface_size, transform, viewport, 105 SyncCompositorDemandDrawHwParams params(surface_size, transform, viewport,
106 clip, viewport_rect_for_tile_priority, 106 clip, viewport_rect_for_tile_priority,
107 transform_for_tile_priority); 107 transform_for_tile_priority);
108 SynchronousCompositor::Frame frame; 108 SynchronousCompositor::Frame frame;
109 frame.frame.reset(new cc::CompositorFrame);
110 SyncCompositorCommonRendererParams common_renderer_params; 109 SyncCompositorCommonRendererParams common_renderer_params;
111 if (!sender_->Send(new SyncCompositorMsg_DemandDrawHw( 110 if (!sender_->Send(new SyncCompositorMsg_DemandDrawHw(
112 routing_id_, params, &common_renderer_params, 111 routing_id_, params, &common_renderer_params,
113 &frame.output_surface_id, frame.frame.get()))) { 112 &frame.output_surface_id, &frame.frame.value()))) {
114 return SynchronousCompositor::Frame(); 113 return SynchronousCompositor::Frame();
115 } 114 }
116 ProcessCommonParams(common_renderer_params); 115 ProcessCommonParams(common_renderer_params);
117 if (!frame.frame->delegated_frame_data) { 116 if (!frame.frame->delegated_frame_data) {
118 // This can happen if compositor did not swap in this draw. 117 // This can happen if compositor did not swap in this draw.
119 frame.frame.reset(); 118 frame.frame = base::nullopt;
120 } 119 }
121 if (frame.frame) { 120 if (frame.frame) {
122 UpdateFrameMetaData(frame.frame->metadata); 121 UpdateFrameMetaData(frame.frame->metadata);
123 } 122 }
124 return frame; 123 return frame;
125 } 124 }
126 125
127 void SynchronousCompositorHost::UpdateFrameMetaData( 126 void SynchronousCompositorHost::UpdateFrameMetaData(
128 const cc::CompositorFrameMetadata& frame_metadata) { 127 const cc::CompositorFrameMetadata& frame_metadata) {
129 rwhva_->SynchronousFrameMetadata(frame_metadata); 128 rwhva_->SynchronousFrameMetadata(frame_metadata);
(...skipping 13 matching lines...) Expand all
143 142
144 private: 143 private:
145 DISALLOW_COPY_AND_ASSIGN(ScopedSetSkCanvas); 144 DISALLOW_COPY_AND_ASSIGN(ScopedSetSkCanvas);
146 }; 145 };
147 146
148 } 147 }
149 148
150 bool SynchronousCompositorHost::DemandDrawSwInProc(SkCanvas* canvas) { 149 bool SynchronousCompositorHost::DemandDrawSwInProc(SkCanvas* canvas) {
151 SyncCompositorCommonRendererParams common_renderer_params; 150 SyncCompositorCommonRendererParams common_renderer_params;
152 bool success = false; 151 bool success = false;
153 std::unique_ptr<cc::CompositorFrame> frame(new cc::CompositorFrame); 152 cc::CompositorFrame frame;
154 ScopedSetSkCanvas set_sk_canvas(canvas); 153 ScopedSetSkCanvas set_sk_canvas(canvas);
155 SyncCompositorDemandDrawSwParams params; // Unused. 154 SyncCompositorDemandDrawSwParams params; // Unused.
156 if (!sender_->Send(new SyncCompositorMsg_DemandDrawSw( 155 if (!sender_->Send(new SyncCompositorMsg_DemandDrawSw(
157 routing_id_, params, &success, &common_renderer_params, 156 routing_id_, params, &success, &common_renderer_params, &frame))) {
158 frame.get()))) {
159 return false; 157 return false;
160 } 158 }
161 if (!success) 159 if (!success)
162 return false; 160 return false;
163 ProcessCommonParams(common_renderer_params); 161 ProcessCommonParams(common_renderer_params);
164 UpdateFrameMetaData(frame->metadata); 162 UpdateFrameMetaData(frame.metadata);
165 return true; 163 return true;
166 } 164 }
167 165
168 class SynchronousCompositorHost::ScopedSendZeroMemory { 166 class SynchronousCompositorHost::ScopedSendZeroMemory {
169 public: 167 public:
170 ScopedSendZeroMemory(SynchronousCompositorHost* host) : host_(host) {} 168 ScopedSendZeroMemory(SynchronousCompositorHost* host) : host_(host) {}
171 ~ScopedSendZeroMemory() { host_->SendZeroMemory(); } 169 ~ScopedSendZeroMemory() { host_->SendZeroMemory(); }
172 170
173 private: 171 private:
174 SynchronousCompositorHost* const host_; 172 SynchronousCompositorHost* const host_;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 DCHECK_EQ(kRGBA_8888_SkColorType, info.colorType()); 205 DCHECK_EQ(kRGBA_8888_SkColorType, info.colorType());
208 size_t stride = info.minRowBytes(); 206 size_t stride = info.minRowBytes();
209 size_t buffer_size = info.getSafeSize(stride); 207 size_t buffer_size = info.getSafeSize(stride);
210 if (!buffer_size) 208 if (!buffer_size)
211 return false; // Overflow. 209 return false; // Overflow.
212 210
213 SetSoftwareDrawSharedMemoryIfNeeded(stride, buffer_size); 211 SetSoftwareDrawSharedMemoryIfNeeded(stride, buffer_size);
214 if (!software_draw_shm_) 212 if (!software_draw_shm_)
215 return false; 213 return false;
216 214
217 std::unique_ptr<cc::CompositorFrame> frame(new cc::CompositorFrame); 215 cc::CompositorFrame frame;
218 SyncCompositorCommonRendererParams common_renderer_params; 216 SyncCompositorCommonRendererParams common_renderer_params;
219 bool success = false; 217 bool success = false;
220 if (!sender_->Send(new SyncCompositorMsg_DemandDrawSw( 218 if (!sender_->Send(new SyncCompositorMsg_DemandDrawSw(
221 routing_id_, params, &success, &common_renderer_params, 219 routing_id_, params, &success, &common_renderer_params, &frame))) {
222 frame.get()))) {
223 return false; 220 return false;
224 } 221 }
225 ScopedSendZeroMemory send_zero_memory(this); 222 ScopedSendZeroMemory send_zero_memory(this);
226 if (!success) 223 if (!success)
227 return false; 224 return false;
228 225
229 ProcessCommonParams(common_renderer_params); 226 ProcessCommonParams(common_renderer_params);
230 UpdateFrameMetaData(frame->metadata); 227 UpdateFrameMetaData(frame.metadata);
231 228
232 SkBitmap bitmap; 229 SkBitmap bitmap;
233 if (!bitmap.installPixels(info, software_draw_shm_->shm.memory(), stride)) 230 if (!bitmap.installPixels(info, software_draw_shm_->shm.memory(), stride))
234 return false; 231 return false;
235 232
236 { 233 {
237 TRACE_EVENT0("browser", "DrawBitmap"); 234 TRACE_EVENT0("browser", "DrawBitmap");
238 canvas->save(); 235 canvas->save();
239 canvas->resetMatrix(); 236 canvas->resetMatrix();
240 canvas->drawBitmap(bitmap, 0, 0); 237 canvas->drawBitmap(bitmap, 0, 0);
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 if (params.page_scale_factor) { 380 if (params.page_scale_factor) {
384 client_->UpdateRootLayerState( 381 client_->UpdateRootLayerState(
385 this, gfx::ScrollOffsetToVector2dF(params.total_scroll_offset), 382 this, gfx::ScrollOffsetToVector2dF(params.total_scroll_offset),
386 gfx::ScrollOffsetToVector2dF(params.max_scroll_offset), 383 gfx::ScrollOffsetToVector2dF(params.max_scroll_offset),
387 params.scrollable_size, params.page_scale_factor, 384 params.scrollable_size, params.page_scale_factor,
388 params.min_page_scale_factor, params.max_page_scale_factor); 385 params.min_page_scale_factor, params.max_page_scale_factor);
389 } 386 }
390 } 387 }
391 388
392 } // namespace content 389 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698