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

Side by Side Diff: cc/surfaces/surface_aggregator.cc

Issue 1968363002: SurfaceAggregator should check whether output is secure when drawin (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 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
« no previous file with comments | « cc/surfaces/surface_aggregator.h ('k') | cc/surfaces/surface_aggregator_perftest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/surfaces/surface_aggregator.h" 5 #include "cc/surfaces/surface_aggregator.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <map> 9 #include <map>
10 10
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/containers/adapters.h" 12 #include "base/containers/adapters.h"
13 #include "base/logging.h" 13 #include "base/logging.h"
14 #include "base/macros.h" 14 #include "base/macros.h"
15 #include "base/memory/ptr_util.h" 15 #include "base/memory/ptr_util.h"
16 #include "base/stl_util.h" 16 #include "base/stl_util.h"
17 #include "base/trace_event/trace_event.h" 17 #include "base/trace_event/trace_event.h"
18 #include "cc/base/math_util.h" 18 #include "cc/base/math_util.h"
19 #include "cc/output/compositor_frame.h" 19 #include "cc/output/compositor_frame.h"
20 #include "cc/output/delegated_frame_data.h" 20 #include "cc/output/delegated_frame_data.h"
21 #include "cc/quads/draw_quad.h" 21 #include "cc/quads/draw_quad.h"
22 #include "cc/quads/render_pass_draw_quad.h" 22 #include "cc/quads/render_pass_draw_quad.h"
23 #include "cc/quads/shared_quad_state.h" 23 #include "cc/quads/shared_quad_state.h"
24 #include "cc/quads/solid_color_draw_quad.h"
24 #include "cc/quads/surface_draw_quad.h" 25 #include "cc/quads/surface_draw_quad.h"
26 #include "cc/quads/texture_draw_quad.h"
25 #include "cc/surfaces/surface.h" 27 #include "cc/surfaces/surface.h"
26 #include "cc/surfaces/surface_factory.h" 28 #include "cc/surfaces/surface_factory.h"
27 #include "cc/surfaces/surface_manager.h" 29 #include "cc/surfaces/surface_manager.h"
28 #include "cc/trees/blocking_task_runner.h" 30 #include "cc/trees/blocking_task_runner.h"
29 31
30 namespace cc { 32 namespace cc {
31 namespace { 33 namespace {
32 34
33 void MoveMatchingRequests( 35 void MoveMatchingRequests(
34 RenderPassId id, 36 RenderPassId id,
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 DrawQuad* dest_quad; 429 DrawQuad* dest_quad;
428 if (quad->material == DrawQuad::RENDER_PASS) { 430 if (quad->material == DrawQuad::RENDER_PASS) {
429 const RenderPassDrawQuad* pass_quad = 431 const RenderPassDrawQuad* pass_quad =
430 RenderPassDrawQuad::MaterialCast(quad); 432 RenderPassDrawQuad::MaterialCast(quad);
431 RenderPassId original_pass_id = pass_quad->render_pass_id; 433 RenderPassId original_pass_id = pass_quad->render_pass_id;
432 RenderPassId remapped_pass_id = 434 RenderPassId remapped_pass_id =
433 RemapPassId(original_pass_id, surface_id); 435 RemapPassId(original_pass_id, surface_id);
434 436
435 dest_quad = dest_pass->CopyFromAndAppendRenderPassDrawQuad( 437 dest_quad = dest_pass->CopyFromAndAppendRenderPassDrawQuad(
436 pass_quad, dest_shared_quad_state, remapped_pass_id); 438 pass_quad, dest_shared_quad_state, remapped_pass_id);
439 } else if (quad->material == DrawQuad::TEXTURE_CONTENT) {
440 const TextureDrawQuad* texture_quad =
441 TextureDrawQuad::MaterialCast(quad);
442 if (texture_quad->secure_output_only &&
443 (!output_is_secure_ || copy_request_passes_.count(dest_pass->id))) {
444 SolidColorDrawQuad* solid_color_quad =
445 dest_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
446 solid_color_quad->SetNew(dest_shared_quad_state, quad->rect,
447 quad->visible_rect, SK_ColorBLACK, false);
448 dest_quad = solid_color_quad;
449 } else {
450 dest_quad = dest_pass->CopyFromAndAppendDrawQuad(
451 quad, dest_shared_quad_state);
452 }
437 } else { 453 } else {
438 dest_quad = 454 dest_quad =
439 dest_pass->CopyFromAndAppendDrawQuad(quad, dest_shared_quad_state); 455 dest_pass->CopyFromAndAppendDrawQuad(quad, dest_shared_quad_state);
440 } 456 }
441 if (!child_to_parent_map.empty()) { 457 if (!child_to_parent_map.empty()) {
442 for (ResourceId& resource_id : dest_quad->resources) { 458 for (ResourceId& resource_id : dest_quad->resources) {
443 ResourceProvider::ResourceIdMap::const_iterator it = 459 ResourceProvider::ResourceIdMap::const_iterator it =
444 child_to_parent_map.find(resource_id); 460 child_to_parent_map.find(resource_id);
445 DCHECK(it != child_to_parent_map.end()); 461 DCHECK(it != child_to_parent_map.end());
446 462
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after
822 838
823 void SurfaceAggregator::SetFullDamageForSurface(SurfaceId surface_id) { 839 void SurfaceAggregator::SetFullDamageForSurface(SurfaceId surface_id) {
824 auto it = previous_contained_surfaces_.find(surface_id); 840 auto it = previous_contained_surfaces_.find(surface_id);
825 if (it == previous_contained_surfaces_.end()) 841 if (it == previous_contained_surfaces_.end())
826 return; 842 return;
827 // Set the last drawn index as 0 to ensure full damage next time it's drawn. 843 // Set the last drawn index as 0 to ensure full damage next time it's drawn.
828 it->second = 0; 844 it->second = 0;
829 } 845 }
830 846
831 } // namespace cc 847 } // namespace cc
OLDNEW
« no previous file with comments | « cc/surfaces/surface_aggregator.h ('k') | cc/surfaces/surface_aggregator_perftest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698