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

Side by Side Diff: cc/ipc/render_pass_struct_traits.cc

Issue 2582823002: WIP: Surface Synchronization System
Patch Set: Only create ClientSurfaceEmbedder if window is visible. Trash it otherwise. Created 3 years, 11 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "cc/ipc/render_pass_struct_traits.h" 5 #include "cc/ipc/render_pass_struct_traits.h"
6 6
7 #include "base/numerics/safe_conversions.h" 7 #include "base/numerics/safe_conversions.h"
8 #include "cc/ipc/shared_quad_state_struct_traits.h" 8 #include "cc/ipc/shared_quad_state_struct_traits.h"
9 9
10 namespace mojo { 10 namespace mojo {
(...skipping 13 matching lines...) Expand all
24 } 24 }
25 (*out)->id = data.id(); 25 (*out)->id = data.id();
26 // RenderPass ids are never zero. 26 // RenderPass ids are never zero.
27 if (!(*out)->id) 27 if (!(*out)->id)
28 return false; 28 return false;
29 (*out)->has_transparent_background = data.has_transparent_background(); 29 (*out)->has_transparent_background = data.has_transparent_background();
30 30
31 mojo::ArrayDataView<cc::mojom::DrawQuadDataView> quads; 31 mojo::ArrayDataView<cc::mojom::DrawQuadDataView> quads;
32 data.GetQuadListDataView(&quads); 32 data.GetQuadListDataView(&quads);
33 cc::SharedQuadState* last_sqs = nullptr; 33 cc::SharedQuadState* last_sqs = nullptr;
34 cc::DrawQuad* last_draw_quad = nullptr;
34 for (size_t i = 0; i < quads.size(); ++i) { 35 for (size_t i = 0; i < quads.size(); ++i) {
35 cc::mojom::DrawQuadDataView quad_data_view; 36 cc::mojom::DrawQuadDataView quad_data_view;
36 quads.GetDataView(i, &quad_data_view); 37 quads.GetDataView(i, &quad_data_view);
37 cc::mojom::DrawQuadStateDataView quad_state_data_view; 38 cc::mojom::DrawQuadStateDataView quad_state_data_view;
38 quad_data_view.GetDrawQuadStateDataView(&quad_state_data_view); 39 quad_data_view.GetDrawQuadStateDataView(&quad_state_data_view);
39 40
40 cc::DrawQuad* quad = 41 cc::DrawQuad* quad =
41 AllocateAndConstruct(quad_state_data_view.tag(), &(*out)->quad_list); 42 AllocateAndConstruct(quad_state_data_view.tag(), &(*out)->quad_list);
42 if (!quad) 43 if (!quad)
43 return false; 44 return false;
44 if (!quads.Read(i, quad)) 45 if (!quads.Read(i, quad))
45 return false; 46 return false;
46 47
47 // Read the SharedQuadState. 48 // Read the SharedQuadState.
48 cc::mojom::SharedQuadStateDataView sqs_data_view; 49 cc::mojom::SharedQuadStateDataView sqs_data_view;
49 quad_data_view.GetSqsDataView(&sqs_data_view); 50 quad_data_view.GetSqsDataView(&sqs_data_view);
50 // If there is no seralized SharedQuadState then used the last deseriaized 51 // If there is no seralized SharedQuadState then used the last deseriaized
51 // one. 52 // one.
52 if (!sqs_data_view.is_null()) { 53 if (!sqs_data_view.is_null()) {
53 last_sqs = (*out)->CreateAndAppendSharedQuadState(); 54 last_sqs = (*out)->CreateAndAppendSharedQuadState();
54 if (!quad_data_view.ReadSqs(last_sqs)) 55 if (!quad_data_view.ReadSqs(last_sqs))
55 return false; 56 return false;
56 } 57 }
57 quad->shared_quad_state = last_sqs; 58 quad->shared_quad_state = last_sqs;
58 if (!quad->shared_quad_state) 59 if (!quad->shared_quad_state)
59 return false; 60 return false;
61
62 // If this quad is a fallback SurfaceDrawQuad then update the previous
63 // primary SurfaceDrawQuad to point to this quad.
64 if (quad->material == cc::DrawQuad::SURFACE_CONTENT) {
65 const cc::SurfaceDrawQuad* surface_draw_quad =
66 cc::SurfaceDrawQuad::MaterialCast(quad);
67 if (surface_draw_quad->surface_draw_quad_type ==
68 cc::SurfaceDrawQuadType::FALLBACK) {
69 if (!last_draw_quad ||
70 last_draw_quad->material != cc::DrawQuad::SURFACE_CONTENT) {
71 return false;
72 }
73 cc::SurfaceDrawQuad* last_surface_draw_quad =
74 static_cast<cc::SurfaceDrawQuad*>(last_draw_quad);
75 // Only one fallback quad is currently supported.
76 if (last_surface_draw_quad->surface_draw_quad_type !=
77 cc::SurfaceDrawQuadType::PRIMARY) {
78 return false;
79 }
80 last_surface_draw_quad->fallback_quad = surface_draw_quad;
81 }
82 }
83 last_draw_quad = quad;
60 } 84 }
61 return true; 85 return true;
62 } 86 }
63 87
64 } // namespace mojo 88 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698