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

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

Issue 2835203002: Reject CompositorFrames with no render passes when deserializing (Closed)
Patch Set: Fixed Android Webview Created 3 years, 8 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 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 } 169 }
170 170
171 private: 171 private:
172 DISALLOW_COPY_AND_ASSIGN(ScopedSetSkCanvas); 172 DISALLOW_COPY_AND_ASSIGN(ScopedSetSkCanvas);
173 }; 173 };
174 174
175 } 175 }
176 176
177 bool SynchronousCompositorHost::DemandDrawSwInProc(SkCanvas* canvas) { 177 bool SynchronousCompositorHost::DemandDrawSwInProc(SkCanvas* canvas) {
178 SyncCompositorCommonRendererParams common_renderer_params; 178 SyncCompositorCommonRendererParams common_renderer_params;
179 bool success = false; 179 base::Optional<cc::CompositorFrameMetadata> metadata;
180 std::unique_ptr<cc::CompositorFrame> frame(new cc::CompositorFrame);
181 ScopedSetSkCanvas set_sk_canvas(canvas); 180 ScopedSetSkCanvas set_sk_canvas(canvas);
182 SyncCompositorDemandDrawSwParams params; // Unused. 181 SyncCompositorDemandDrawSwParams params; // Unused.
183 { 182 {
184 base::ThreadRestrictions::ScopedAllowWait wait; 183 base::ThreadRestrictions::ScopedAllowWait wait;
185 if (!sender_->Send(new SyncCompositorMsg_DemandDrawSw( 184 if (!sender_->Send(new SyncCompositorMsg_DemandDrawSw(
186 routing_id_, params, &success, &common_renderer_params, 185 routing_id_, params, &common_renderer_params, &metadata))) {
187 frame.get()))) {
188 return false; 186 return false;
189 } 187 }
190 } 188 }
191 if (!success) 189 if (!metadata)
192 return false; 190 return false;
193 ProcessCommonParams(common_renderer_params); 191 ProcessCommonParams(common_renderer_params);
194 UpdateFrameMetaData(std::move(frame->metadata)); 192 UpdateFrameMetaData(std::move(*metadata));
195 return true; 193 return true;
196 } 194 }
197 195
198 class SynchronousCompositorHost::ScopedSendZeroMemory { 196 class SynchronousCompositorHost::ScopedSendZeroMemory {
199 public: 197 public:
200 ScopedSendZeroMemory(SynchronousCompositorHost* host) : host_(host) {} 198 ScopedSendZeroMemory(SynchronousCompositorHost* host) : host_(host) {}
201 ~ScopedSendZeroMemory() { host_->SendZeroMemory(); } 199 ~ScopedSendZeroMemory() { host_->SendZeroMemory(); }
202 200
203 private: 201 private:
204 SynchronousCompositorHost* const host_; 202 SynchronousCompositorHost* const host_;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 DCHECK_EQ(kRGBA_8888_SkColorType, info.colorType()); 234 DCHECK_EQ(kRGBA_8888_SkColorType, info.colorType());
237 size_t stride = info.minRowBytes(); 235 size_t stride = info.minRowBytes();
238 size_t buffer_size = info.getSafeSize(stride); 236 size_t buffer_size = info.getSafeSize(stride);
239 if (!buffer_size) 237 if (!buffer_size)
240 return false; // Overflow. 238 return false; // Overflow.
241 239
242 SetSoftwareDrawSharedMemoryIfNeeded(stride, buffer_size); 240 SetSoftwareDrawSharedMemoryIfNeeded(stride, buffer_size);
243 if (!software_draw_shm_) 241 if (!software_draw_shm_)
244 return false; 242 return false;
245 243
246 std::unique_ptr<cc::CompositorFrame> frame(new cc::CompositorFrame); 244 base::Optional<cc::CompositorFrameMetadata> metadata;
247 SyncCompositorCommonRendererParams common_renderer_params; 245 SyncCompositorCommonRendererParams common_renderer_params;
248 bool success = false;
249 { 246 {
250 base::ThreadRestrictions::ScopedAllowWait wait; 247 base::ThreadRestrictions::ScopedAllowWait wait;
251 if (!sender_->Send(new SyncCompositorMsg_DemandDrawSw( 248 if (!sender_->Send(new SyncCompositorMsg_DemandDrawSw(
252 routing_id_, params, &success, &common_renderer_params, 249 routing_id_, params, &common_renderer_params, &metadata))) {
253 frame.get()))) {
254 return false; 250 return false;
255 } 251 }
256 } 252 }
257 ScopedSendZeroMemory send_zero_memory(this); 253 ScopedSendZeroMemory send_zero_memory(this);
258 if (!success) 254 if (!metadata)
259 return false; 255 return false;
260 256
261 ProcessCommonParams(common_renderer_params); 257 ProcessCommonParams(common_renderer_params);
262 UpdateFrameMetaData(std::move(frame->metadata)); 258 UpdateFrameMetaData(std::move(*metadata));
263 259
264 SkBitmap bitmap; 260 SkBitmap bitmap;
265 if (!bitmap.installPixels(info, software_draw_shm_->shm.memory(), stride)) 261 if (!bitmap.installPixels(info, software_draw_shm_->shm.memory(), stride))
266 return false; 262 return false;
267 263
268 { 264 {
269 TRACE_EVENT0("browser", "DrawBitmap"); 265 TRACE_EVENT0("browser", "DrawBitmap");
270 canvas->save(); 266 canvas->save();
271 canvas->resetMatrix(); 267 canvas->resetMatrix();
272 canvas->drawBitmap(bitmap, 0, 0); 268 canvas->drawBitmap(bitmap, 0, 0);
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 if (params.page_scale_factor) { 416 if (params.page_scale_factor) {
421 client_->UpdateRootLayerState( 417 client_->UpdateRootLayerState(
422 this, gfx::ScrollOffsetToVector2dF(params.total_scroll_offset), 418 this, gfx::ScrollOffsetToVector2dF(params.total_scroll_offset),
423 gfx::ScrollOffsetToVector2dF(params.max_scroll_offset), 419 gfx::ScrollOffsetToVector2dF(params.max_scroll_offset),
424 params.scrollable_size, params.page_scale_factor, 420 params.scrollable_size, params.page_scale_factor,
425 params.min_page_scale_factor, params.max_page_scale_factor); 421 params.min_page_scale_factor, params.max_page_scale_factor);
426 } 422 }
427 } 423 }
428 424
429 } // namespace content 425 } // namespace content
OLDNEW
« no previous file with comments | « cc/ipc/compositor_frame_struct_traits.cc ('k') | content/browser/renderer_host/render_widget_host_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698