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

Side by Side Diff: components/viz/service/display/surface_aggregator.cc

Issue 2873593002: Force use of and cache render surface. (Closed)
Patch Set: Add more tests to surface_aggregator. Created 3 years, 4 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 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 "components/viz/service/display/surface_aggregator.h" 5 #include "components/viz/service/display/surface_aggregator.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <map> 9 #include <map>
10 10
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 size_t sqs_size = source.shared_quad_state_list.size(); 258 size_t sqs_size = source.shared_quad_state_list.size();
259 size_t dq_size = source.quad_list.size(); 259 size_t dq_size = source.quad_list.size();
260 std::unique_ptr<cc::RenderPass> copy_pass( 260 std::unique_ptr<cc::RenderPass> copy_pass(
261 cc::RenderPass::Create(sqs_size, dq_size)); 261 cc::RenderPass::Create(sqs_size, dq_size));
262 262
263 cc::RenderPassId remapped_pass_id = RemapPassId(source.id, surface_id); 263 cc::RenderPassId remapped_pass_id = RemapPassId(source.id, surface_id);
264 264
265 copy_pass->SetAll(remapped_pass_id, source.output_rect, source.output_rect, 265 copy_pass->SetAll(remapped_pass_id, source.output_rect, source.output_rect,
266 source.transform_to_root_target, source.filters, 266 source.transform_to_root_target, source.filters,
267 source.background_filters, blending_color_space_, 267 source.background_filters, blending_color_space_,
268 source.has_transparent_background); 268 source.has_transparent_background,
269 source.cache_render_pass,
270 source.has_damage_from_contributing_content);
269 271
270 MoveMatchingRequests(source.id, &copy_requests, &copy_pass->copy_requests); 272 MoveMatchingRequests(source.id, &copy_requests, &copy_pass->copy_requests);
271 273
272 // Contributing passes aggregated in to the pass list need to take the 274 // Contributing passes aggregated in to the pass list need to take the
273 // transform of the surface quad into account to update their transform to 275 // transform of the surface quad into account to update their transform to
274 // the root surface. 276 // the root surface.
275 copy_pass->transform_to_root_target.ConcatTransform( 277 copy_pass->transform_to_root_target.ConcatTransform(
276 surface_quad->shared_quad_state->quad_to_target_transform); 278 surface_quad->shared_quad_state->quad_to_target_transform);
277 copy_pass->transform_to_root_target.ConcatTransform(target_transform); 279 copy_pass->transform_to_root_target.ConcatTransform(target_transform);
278 copy_pass->transform_to_root_target.ConcatTransform( 280 copy_pass->transform_to_root_target.ConcatTransform(
279 dest_pass->transform_to_root_target); 281 dest_pass->transform_to_root_target);
280 282
281 CopyQuadsToPass(source.quad_list, source.shared_quad_state_list, 283 CopyQuadsToPass(source.quad_list, source.shared_quad_state_list,
282 child_to_parent_map, gfx::Transform(), ClipData(), 284 child_to_parent_map, gfx::Transform(), ClipData(),
283 copy_pass.get(), surface_id); 285 copy_pass.get(), surface_id);
284 286
287 // If the render pass has copy requests, or should be cached, or has
288 // moving-pixel filters, or in a moving-pixel surface, we should damage the
289 // whole output rect so that we always drawn the full content. Otherwise, we
290 // might have incompleted copy request, or cached patially drawn render pass
291 // .
danakj 2017/07/27 21:24:33 this period should be attached to a word :) so wra
wutao 2017/07/28 17:05:16 Done
285 if (!copy_request_passes_.count(remapped_pass_id) && 292 if (!copy_request_passes_.count(remapped_pass_id) &&
293 !copy_pass->cache_render_pass &&
286 !moved_pixel_passes_.count(remapped_pass_id)) { 294 !moved_pixel_passes_.count(remapped_pass_id)) {
287 gfx::Transform inverse_transform(gfx::Transform::kSkipInitialization); 295 gfx::Transform inverse_transform(gfx::Transform::kSkipInitialization);
288 if (copy_pass->transform_to_root_target.GetInverse(&inverse_transform)) { 296 if (copy_pass->transform_to_root_target.GetInverse(&inverse_transform)) {
289 gfx::Rect damage_rect_in_render_pass_space = 297 gfx::Rect damage_rect_in_render_pass_space =
290 cc::MathUtil::ProjectEnclosingClippedRect(inverse_transform, 298 cc::MathUtil::ProjectEnclosingClippedRect(inverse_transform,
291 root_damage_rect_); 299 root_damage_rect_);
292 copy_pass->damage_rect.Intersect(damage_rect_in_render_pass_space); 300 copy_pass->damage_rect.Intersect(damage_rect_in_render_pass_space);
293 } 301 }
294 } 302 }
295 303
304 id_to_render_pass_map_[copy_pass->id] = copy_pass.get();
danakj 2017/07/27 21:24:33 one thought here: it seems like this map is only u
wutao 2017/07/28 17:05:16 Very nice, thank you. The bool should not change a
296 dest_pass_list_->push_back(std::move(copy_pass)); 305 dest_pass_list_->push_back(std::move(copy_pass));
297 } 306 }
298 307
299 gfx::Transform surface_transform = 308 gfx::Transform surface_transform =
300 surface_quad->shared_quad_state->quad_to_target_transform; 309 surface_quad->shared_quad_state->quad_to_target_transform;
301 surface_transform.ConcatTransform(target_transform); 310 surface_transform.ConcatTransform(target_transform);
302 311
303 const auto& last_pass = *render_pass_list.back(); 312 const auto& last_pass = *render_pass_list.back();
313 // This will check if all the surface_quads (including child surfaces) has
314 // damage because HandleSurfaceQuad is a recursive call by calling
315 // CopyQuadsToPass in it.
316 dest_pass->has_damage_from_contributing_content |=
317 !DamageRectForSurface(surface, last_pass, last_pass.output_rect)
318 .IsEmpty();
319
304 if (merge_pass) { 320 if (merge_pass) {
305 // TODO(jamesr): Clean up last pass special casing. 321 // TODO(jamesr): Clean up last pass special casing.
306 const cc::QuadList& quads = last_pass.quad_list; 322 const cc::QuadList& quads = last_pass.quad_list;
307 323
308 // Intersect the transformed visible rect and the clip rect to create a 324 // Intersect the transformed visible rect and the clip rect to create a
309 // smaller cliprect for the quad. 325 // smaller cliprect for the quad.
310 ClipData surface_quad_clip_rect( 326 ClipData surface_quad_clip_rect(
311 true, cc::MathUtil::MapEnclosingClippedRect( 327 true, cc::MathUtil::MapEnclosingClippedRect(
312 surface_quad->shared_quad_state->quad_to_target_transform, 328 surface_quad->shared_quad_state->quad_to_target_transform,
313 surface_quad->visible_rect)); 329 surface_quad->visible_rect));
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
403 const cc::QuadList& source_quad_list, 419 const cc::QuadList& source_quad_list,
404 const cc::SharedQuadStateList& source_shared_quad_state_list, 420 const cc::SharedQuadStateList& source_shared_quad_state_list,
405 const std::unordered_map<cc::ResourceId, cc::ResourceId>& 421 const std::unordered_map<cc::ResourceId, cc::ResourceId>&
406 child_to_parent_map, 422 child_to_parent_map,
407 const gfx::Transform& target_transform, 423 const gfx::Transform& target_transform,
408 const ClipData& clip_rect, 424 const ClipData& clip_rect,
409 cc::RenderPass* dest_pass, 425 cc::RenderPass* dest_pass,
410 const SurfaceId& surface_id) { 426 const SurfaceId& surface_id) {
411 const cc::SharedQuadState* last_copied_source_shared_quad_state = nullptr; 427 const cc::SharedQuadState* last_copied_source_shared_quad_state = nullptr;
412 const cc::SharedQuadState* dest_shared_quad_state = nullptr; 428 const cc::SharedQuadState* dest_shared_quad_state = nullptr;
413 // If the current frame has copy requests then aggregate the entire 429 // If the current frame has copy requests or cahced render passes, then
danakj 2017/07/27 21:24:33 cached
wutao 2017/07/28 17:05:16 Done.
414 // thing, as otherwise parts of the copy requests may be ignored. 430 // aggregate the entire thing, as otherwise parts of the copy requests may be
415 const bool ignore_undamaged = aggregate_only_damaged_ && 431 // ignored and we could cache partially drawn render pass.
416 !has_copy_requests_ && 432 const bool ignore_undamaged =
417 !moved_pixel_passes_.count(dest_pass->id); 433 aggregate_only_damaged_ && !has_copy_requests_ &&
434 !has_cached_render_passes_ && !moved_pixel_passes_.count(dest_pass->id);
418 // Damage rect in the quad space of the current shared quad state. 435 // Damage rect in the quad space of the current shared quad state.
419 // TODO(jbauman): This rect may contain unnecessary area if 436 // TODO(jbauman): This rect may contain unnecessary area if
420 // transform isn't axis-aligned. 437 // transform isn't axis-aligned.
421 gfx::Rect damage_rect_in_quad_space; 438 gfx::Rect damage_rect_in_quad_space;
422 bool damage_rect_in_quad_space_valid = false; 439 bool damage_rect_in_quad_space_valid = false;
423 440
424 #if DCHECK_IS_ON() 441 #if DCHECK_IS_ON()
425 // If quads have come in with SharedQuadState out of order, or when quads have 442 // If quads have come in with SharedQuadState out of order, or when quads have
426 // invalid SharedQuadState pointer, it should DCHECK. 443 // invalid SharedQuadState pointer, it should DCHECK.
427 auto sqs_iter = source_shared_quad_state_list.cbegin(); 444 auto sqs_iter = source_shared_quad_state_list.cbegin();
(...skipping 20 matching lines...) Expand all
448 continue; 465 continue;
449 466
450 HandleSurfaceQuad(surface_quad, target_transform, clip_rect, dest_pass, 467 HandleSurfaceQuad(surface_quad, target_transform, clip_rect, dest_pass,
451 ignore_undamaged, &damage_rect_in_quad_space, 468 ignore_undamaged, &damage_rect_in_quad_space,
452 &damage_rect_in_quad_space_valid); 469 &damage_rect_in_quad_space_valid);
453 } else { 470 } else {
454 if (quad->shared_quad_state != last_copied_source_shared_quad_state) { 471 if (quad->shared_quad_state != last_copied_source_shared_quad_state) {
455 dest_shared_quad_state = CopySharedQuadState( 472 dest_shared_quad_state = CopySharedQuadState(
456 quad->shared_quad_state, target_transform, clip_rect, dest_pass); 473 quad->shared_quad_state, target_transform, clip_rect, dest_pass);
457 last_copied_source_shared_quad_state = quad->shared_quad_state; 474 last_copied_source_shared_quad_state = quad->shared_quad_state;
458 if (aggregate_only_damaged_ && !has_copy_requests_) { 475 if (aggregate_only_damaged_ && !has_copy_requests_ &&
476 !has_cached_render_passes_) {
459 damage_rect_in_quad_space_valid = CalculateQuadSpaceDamageRect( 477 damage_rect_in_quad_space_valid = CalculateQuadSpaceDamageRect(
460 dest_shared_quad_state->quad_to_target_transform, 478 dest_shared_quad_state->quad_to_target_transform,
461 dest_pass->transform_to_root_target, root_damage_rect_, 479 dest_pass->transform_to_root_target, root_damage_rect_,
462 &damage_rect_in_quad_space); 480 &damage_rect_in_quad_space);
463 } 481 }
464 } 482 }
465 483
466 if (ignore_undamaged) { 484 if (ignore_undamaged) {
467 if (damage_rect_in_quad_space_valid && 485 if (damage_rect_in_quad_space_valid &&
468 !damage_rect_in_quad_space.Intersects(quad->visible_rect)) 486 !damage_rect_in_quad_space.Intersects(quad->visible_rect))
469 continue; 487 continue;
470 } 488 }
471 489
472 cc::DrawQuad* dest_quad; 490 cc::DrawQuad* dest_quad;
473 if (quad->material == cc::DrawQuad::RENDER_PASS) { 491 if (quad->material == cc::DrawQuad::RENDER_PASS) {
474 const auto* pass_quad = cc::RenderPassDrawQuad::MaterialCast(quad); 492 const auto* pass_quad = cc::RenderPassDrawQuad::MaterialCast(quad);
475 int original_pass_id = pass_quad->render_pass_id; 493 cc::RenderPassId original_pass_id = pass_quad->render_pass_id;
476 int remapped_pass_id = RemapPassId(original_pass_id, surface_id); 494 cc::RenderPassId remapped_pass_id =
495 RemapPassId(original_pass_id, surface_id);
496
497 // If the RenderPassDrawQuad is referring to other render pass with the
498 // |has_damage_from_contributing_content| set on it, then the dest_pass
499 // should have the flag set on it as well.
500 auto iter = id_to_render_pass_map_.find(remapped_pass_id);
501 if (iter != id_to_render_pass_map_.end()) {
502 dest_pass->has_damage_from_contributing_content |=
503 iter->second->has_damage_from_contributing_content;
504 }
477 505
478 dest_quad = dest_pass->CopyFromAndAppendRenderPassDrawQuad( 506 dest_quad = dest_pass->CopyFromAndAppendRenderPassDrawQuad(
479 pass_quad, dest_shared_quad_state, remapped_pass_id); 507 pass_quad, dest_shared_quad_state, remapped_pass_id);
480 } else if (quad->material == cc::DrawQuad::TEXTURE_CONTENT) { 508 } else if (quad->material == cc::DrawQuad::TEXTURE_CONTENT) {
481 const auto* texture_quad = cc::TextureDrawQuad::MaterialCast(quad); 509 const auto* texture_quad = cc::TextureDrawQuad::MaterialCast(quad);
482 if (texture_quad->secure_output_only && 510 if (texture_quad->secure_output_only &&
483 (!output_is_secure_ || copy_request_passes_.count(dest_pass->id))) { 511 (!output_is_secure_ || copy_request_passes_.count(dest_pass->id))) {
484 auto* solid_color_quad = 512 auto* solid_color_quad =
485 dest_pass->CreateAndAppendDrawQuad<cc::SolidColorDrawQuad>(); 513 dest_pass->CreateAndAppendDrawQuad<cc::SolidColorDrawQuad>();
486 solid_color_quad->SetNew(dest_shared_quad_state, quad->rect, 514 solid_color_quad->SetNew(dest_shared_quad_state, quad->rect,
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
535 auto copy_pass = cc::RenderPass::Create(sqs_size, dq_size); 563 auto copy_pass = cc::RenderPass::Create(sqs_size, dq_size);
536 564
537 MoveMatchingRequests(source.id, &copy_requests, &copy_pass->copy_requests); 565 MoveMatchingRequests(source.id, &copy_requests, &copy_pass->copy_requests);
538 566
539 cc::RenderPassId remapped_pass_id = 567 cc::RenderPassId remapped_pass_id =
540 RemapPassId(source.id, surface->surface_id()); 568 RemapPassId(source.id, surface->surface_id());
541 569
542 copy_pass->SetAll(remapped_pass_id, source.output_rect, source.output_rect, 570 copy_pass->SetAll(remapped_pass_id, source.output_rect, source.output_rect,
543 source.transform_to_root_target, source.filters, 571 source.transform_to_root_target, source.filters,
544 source.background_filters, blending_color_space_, 572 source.background_filters, blending_color_space_,
545 source.has_transparent_background); 573 source.has_transparent_background,
574 source.cache_render_pass,
575 source.has_damage_from_contributing_content);
546 576
547 CopyQuadsToPass(source.quad_list, source.shared_quad_state_list, 577 CopyQuadsToPass(source.quad_list, source.shared_quad_state_list,
548 child_to_parent_map, gfx::Transform(), ClipData(), 578 child_to_parent_map, gfx::Transform(), ClipData(),
549 copy_pass.get(), surface->surface_id()); 579 copy_pass.get(), surface->surface_id());
580
581 // If the render pass has copy requests, or should be cached, or has
582 // moving-pixel filters, or in a moving-pixel surface, we should damage the
583 // whole output rect so that we always drawn the full content. Otherwise, we
584 // might have incompleted copy request, or cached patially drawn render pass
585 // .
danakj 2017/07/27 21:24:33 this one also
wutao 2017/07/28 17:05:16 Done.
550 if (!copy_request_passes_.count(remapped_pass_id) && 586 if (!copy_request_passes_.count(remapped_pass_id) &&
587 !copy_pass->cache_render_pass &&
551 !moved_pixel_passes_.count(remapped_pass_id)) { 588 !moved_pixel_passes_.count(remapped_pass_id)) {
552 gfx::Transform inverse_transform(gfx::Transform::kSkipInitialization); 589 gfx::Transform inverse_transform(gfx::Transform::kSkipInitialization);
553 if (copy_pass->transform_to_root_target.GetInverse(&inverse_transform)) { 590 if (copy_pass->transform_to_root_target.GetInverse(&inverse_transform)) {
554 gfx::Rect damage_rect_in_render_pass_space = 591 gfx::Rect damage_rect_in_render_pass_space =
555 cc::MathUtil::ProjectEnclosingClippedRect(inverse_transform, 592 cc::MathUtil::ProjectEnclosingClippedRect(inverse_transform,
556 root_damage_rect_); 593 root_damage_rect_);
557 copy_pass->damage_rect.Intersect(damage_rect_in_render_pass_space); 594 copy_pass->damage_rect.Intersect(damage_rect_in_render_pass_space);
558 } 595 }
559 } 596 }
560 597
598 id_to_render_pass_map_[copy_pass->id] = copy_pass.get();
561 dest_pass_list_->push_back(std::move(copy_pass)); 599 dest_pass_list_->push_back(std::move(copy_pass));
562 } 600 }
563 } 601 }
564 602
565 void SurfaceAggregator::ProcessAddedAndRemovedSurfaces() { 603 void SurfaceAggregator::ProcessAddedAndRemovedSurfaces() {
566 for (const auto& surface : previous_contained_surfaces_) { 604 for (const auto& surface : previous_contained_surfaces_) {
567 if (!contained_surfaces_.count(surface.first)) { 605 if (!contained_surfaces_.count(surface.first)) {
568 // Release resources of removed surface. 606 // Release resources of removed surface.
569 auto it = surface_id_to_resource_child_id_.find(surface.first); 607 auto it = surface_id_to_resource_child_id_.find(surface.first);
570 if (it != surface_id_to_resource_child_id_.end()) { 608 if (it != surface_id_to_resource_child_id_.end()) {
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
761 CHECK(debug_weak_this.get()); 799 CHECK(debug_weak_this.get());
762 // TODO(staraz): It shouldn't need to call the callback when the damage is 800 // TODO(staraz): It shouldn't need to call the callback when the damage is
763 // from |surface| and not from |child_surfaces|. 801 // from |surface| and not from |child_surfaces|.
764 if (!damage_rect.IsEmpty()) { 802 if (!damage_rect.IsEmpty()) {
765 surface->RunWillDrawCallback(damage_rect); 803 surface->RunWillDrawCallback(damage_rect);
766 manager_->SurfaceWillDraw(surface->surface_id()); 804 manager_->SurfaceWillDraw(surface->surface_id());
767 } 805 }
768 806
769 CHECK(debug_weak_this.get()); 807 CHECK(debug_weak_this.get());
770 for (const auto& render_pass : frame.render_pass_list) { 808 for (const auto& render_pass : frame.render_pass_list) {
771 if (!render_pass->copy_requests.empty()) { 809 cc::RenderPassId remapped_pass_id =
772 cc::RenderPassId remapped_pass_id = 810 RemapPassId(render_pass->id, surface_id);
773 RemapPassId(render_pass->id, surface_id); 811 if (!render_pass->copy_requests.empty())
774 copy_request_passes_.insert(remapped_pass_id); 812 copy_request_passes_.insert(remapped_pass_id);
775 } 813 if (render_pass->cache_render_pass)
814 cached_render_passes_.insert(remapped_pass_id);
danakj 2017/07/27 21:24:33 it seems like we're building this structure just t
wutao 2017/07/28 17:05:16 Good point, done.
776 } 815 }
777 816
778 // TODO(jbauman): Remove when https://crbug.com/745684 fixed. 817 // TODO(jbauman): Remove when https://crbug.com/745684 fixed.
779 CHECK(surface->surface_id() == surface_id); 818 CHECK(surface->surface_id() == surface_id);
780 auto it = referenced_surfaces_.find(surface_id); 819 auto it = referenced_surfaces_.find(surface_id);
781 // TODO(jbauman): Remove when https://crbug.com/745684 fixed. 820 // TODO(jbauman): Remove when https://crbug.com/745684 fixed.
782 CHECK(referenced_surfaces_.end() != it); 821 CHECK(referenced_surfaces_.end() != it);
783 referenced_surfaces_.erase(it); 822 referenced_surfaces_.erase(it);
784 if (!damage_rect.IsEmpty() && frame.metadata.may_contain_video) 823 if (!damage_rect.IsEmpty() && frame.metadata.may_contain_video)
785 result->may_contain_video = true; 824 result->may_contain_video = true;
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
864 903
865 cc::CompositorFrame frame; 904 cc::CompositorFrame frame;
866 905
867 dest_pass_list_ = &frame.render_pass_list; 906 dest_pass_list_ = &frame.render_pass_list;
868 907
869 valid_surfaces_.clear(); 908 valid_surfaces_.clear();
870 PrewalkResult prewalk_result; 909 PrewalkResult prewalk_result;
871 root_damage_rect_ = PrewalkTree(surface_id, false, 0, &prewalk_result); 910 root_damage_rect_ = PrewalkTree(surface_id, false, 0, &prewalk_result);
872 PropagateCopyRequestPasses(); 911 PropagateCopyRequestPasses();
873 has_copy_requests_ = !copy_request_passes_.empty(); 912 has_copy_requests_ = !copy_request_passes_.empty();
913 has_cached_render_passes_ = !cached_render_passes_.empty();
874 frame.metadata.may_contain_video = prewalk_result.may_contain_video; 914 frame.metadata.may_contain_video = prewalk_result.may_contain_video;
875 915
876 CopyUndrawnSurfaces(&prewalk_result); 916 CopyUndrawnSurfaces(&prewalk_result);
877 referenced_surfaces_.insert(surface_id); 917 referenced_surfaces_.insert(surface_id);
878 CopyPasses(root_surface_frame, surface); 918 CopyPasses(root_surface_frame, surface);
879 // CopyPasses may have mutated container, need to re-query to erase. 919 // CopyPasses may have mutated container, need to re-query to erase.
880 referenced_surfaces_.erase(referenced_surfaces_.find(surface_id)); 920 referenced_surfaces_.erase(referenced_surfaces_.find(surface_id));
881 AddColorConversionPass(); 921 AddColorConversionPass();
882 922
883 moved_pixel_passes_.clear(); 923 moved_pixel_passes_.clear();
(...skipping 10 matching lines...) Expand all
894 it = render_pass_allocator_map_.erase(it); 934 it = render_pass_allocator_map_.erase(it);
895 } 935 }
896 } 936 }
897 937
898 DCHECK(referenced_surfaces_.empty()); 938 DCHECK(referenced_surfaces_.empty());
899 939
900 if (dest_pass_list_->empty()) 940 if (dest_pass_list_->empty())
901 return {}; 941 return {};
902 942
903 dest_pass_list_ = NULL; 943 dest_pass_list_ = NULL;
944 id_to_render_pass_map_.clear();
904 ProcessAddedAndRemovedSurfaces(); 945 ProcessAddedAndRemovedSurfaces();
905 contained_surfaces_.swap(previous_contained_surfaces_); 946 contained_surfaces_.swap(previous_contained_surfaces_);
906 contained_surfaces_.clear(); 947 contained_surfaces_.clear();
907 948
908 for (auto it : previous_contained_surfaces_) { 949 for (auto it : previous_contained_surfaces_) {
909 Surface* surface = manager_->GetSurfaceForId(it.first); 950 Surface* surface = manager_->GetSurfaceForId(it.first);
910 if (surface) 951 if (surface)
911 surface->TakeLatencyInfo(&frame.metadata.latency_info); 952 surface->TakeLatencyInfo(&frame.metadata.latency_info);
912 } 953 }
913 954
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
947 const gfx::ColorSpace& output_color_space) { 988 const gfx::ColorSpace& output_color_space) {
948 blending_color_space_ = blending_color_space.IsValid() 989 blending_color_space_ = blending_color_space.IsValid()
949 ? blending_color_space 990 ? blending_color_space
950 : gfx::ColorSpace::CreateSRGB(); 991 : gfx::ColorSpace::CreateSRGB();
951 output_color_space_ = output_color_space.IsValid() 992 output_color_space_ = output_color_space.IsValid()
952 ? output_color_space 993 ? output_color_space
953 : gfx::ColorSpace::CreateSRGB(); 994 : gfx::ColorSpace::CreateSRGB();
954 } 995 }
955 996
956 } // namespace viz 997 } // namespace viz
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698