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

Side by Side Diff: cc/trees/layer_tree_host_impl.cc

Issue 23805002: [cc] Enable specifying a overhang/gutter texture. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Incorporate review feedback Created 7 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_host_impl_unittest.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 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 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/trees/layer_tree_host_impl.h" 5 #include "cc/trees/layer_tree_host_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/containers/hash_tables.h" 10 #include "base/containers/hash_tables.h"
(...skipping 20 matching lines...) Expand all
31 #include "cc/layers/painted_scrollbar_layer_impl.h" 31 #include "cc/layers/painted_scrollbar_layer_impl.h"
32 #include "cc/layers/render_surface_impl.h" 32 #include "cc/layers/render_surface_impl.h"
33 #include "cc/output/compositor_frame_metadata.h" 33 #include "cc/output/compositor_frame_metadata.h"
34 #include "cc/output/copy_output_request.h" 34 #include "cc/output/copy_output_request.h"
35 #include "cc/output/delegating_renderer.h" 35 #include "cc/output/delegating_renderer.h"
36 #include "cc/output/gl_renderer.h" 36 #include "cc/output/gl_renderer.h"
37 #include "cc/output/software_renderer.h" 37 #include "cc/output/software_renderer.h"
38 #include "cc/quads/render_pass_draw_quad.h" 38 #include "cc/quads/render_pass_draw_quad.h"
39 #include "cc/quads/shared_quad_state.h" 39 #include "cc/quads/shared_quad_state.h"
40 #include "cc/quads/solid_color_draw_quad.h" 40 #include "cc/quads/solid_color_draw_quad.h"
41 #include "cc/quads/texture_draw_quad.h"
41 #include "cc/resources/memory_history.h" 42 #include "cc/resources/memory_history.h"
42 #include "cc/resources/picture_layer_tiling.h" 43 #include "cc/resources/picture_layer_tiling.h"
43 #include "cc/resources/prioritized_resource_manager.h" 44 #include "cc/resources/prioritized_resource_manager.h"
44 #include "cc/resources/ui_resource_bitmap.h" 45 #include "cc/resources/ui_resource_bitmap.h"
45 #include "cc/scheduler/delay_based_time_source.h" 46 #include "cc/scheduler/delay_based_time_source.h"
46 #include "cc/scheduler/texture_uploader.h" 47 #include "cc/scheduler/texture_uploader.h"
47 #include "cc/trees/damage_tracker.h" 48 #include "cc/trees/damage_tracker.h"
48 #include "cc/trees/layer_tree_host.h" 49 #include "cc/trees/layer_tree_host.h"
49 #include "cc/trees/layer_tree_host_common.h" 50 #include "cc/trees/layer_tree_host_common.h"
50 #include "cc/trees/layer_tree_impl.h" 51 #include "cc/trees/layer_tree_impl.h"
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 fps_counter_(FrameRateCounter::Create(proxy_->HasImplThread())), 188 fps_counter_(FrameRateCounter::Create(proxy_->HasImplThread())),
188 paint_time_counter_(PaintTimeCounter::Create()), 189 paint_time_counter_(PaintTimeCounter::Create()),
189 memory_history_(MemoryHistory::Create()), 190 memory_history_(MemoryHistory::Create()),
190 debug_rect_history_(DebugRectHistory::Create()), 191 debug_rect_history_(DebugRectHistory::Create()),
191 max_memory_needed_bytes_(0), 192 max_memory_needed_bytes_(0),
192 last_sent_memory_visible_bytes_(0), 193 last_sent_memory_visible_bytes_(0),
193 last_sent_memory_visible_and_nearby_bytes_(0), 194 last_sent_memory_visible_and_nearby_bytes_(0),
194 last_sent_memory_use_bytes_(0), 195 last_sent_memory_use_bytes_(0),
195 zero_budget_(false), 196 zero_budget_(false),
196 device_scale_factor_(1.f), 197 device_scale_factor_(1.f),
198 overhang_ui_resource_id_(0),
197 overdraw_bottom_height_(0.f), 199 overdraw_bottom_height_(0.f),
198 external_stencil_test_enabled_(false), 200 external_stencil_test_enabled_(false),
199 animation_registrar_(AnimationRegistrar::Create()), 201 animation_registrar_(AnimationRegistrar::Create()),
200 rendering_stats_instrumentation_(rendering_stats_instrumentation), 202 rendering_stats_instrumentation_(rendering_stats_instrumentation),
201 need_to_update_visible_tiles_before_draw_(false) { 203 need_to_update_visible_tiles_before_draw_(false) {
202 DCHECK(proxy_->IsImplThread()); 204 DCHECK(proxy_->IsImplThread());
203 DidVisibilityChange(this, visible_); 205 DidVisibilityChange(this, visible_);
204 206
205 SetDebugState(settings.initial_debug_state); 207 SetDebugState(settings.initial_debug_state);
206 208
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after
518 if (layer->has_replica()) { 520 if (layer->has_replica()) {
519 is_replica = true; 521 is_replica = true;
520 layer->render_surface()->AppendQuads(&quad_culler, 522 layer->render_surface()->AppendQuads(&quad_culler,
521 append_quads_data, 523 append_quads_data,
522 is_replica, 524 is_replica,
523 contributing_render_pass->id); 525 contributing_render_pass->id);
524 } 526 }
525 } 527 }
526 528
527 static void AppendQuadsToFillScreen( 529 static void AppendQuadsToFillScreen(
530 ResourceProvider::ResourceId resource_id,
531 gfx::SizeF resource_scaled_size,
528 RenderPass* target_render_pass, 532 RenderPass* target_render_pass,
529 LayerImpl* root_layer, 533 LayerImpl* root_layer,
530 SkColor screen_background_color, 534 SkColor screen_background_color,
531 const OcclusionTrackerImpl& occlusion_tracker) { 535 const OcclusionTrackerImpl& occlusion_tracker) {
532 if (!root_layer || !SkColorGetA(screen_background_color)) 536 if (!root_layer || !SkColorGetA(screen_background_color))
533 return; 537 return;
534 538
535 Region fill_region = occlusion_tracker.ComputeVisibleRegionInScreen(); 539 Region fill_region = occlusion_tracker.ComputeVisibleRegionInScreen();
536 if (fill_region.IsEmpty()) 540 if (fill_region.IsEmpty())
537 return; 541 return;
(...skipping 28 matching lines...) Expand all
566 bool did_invert = root_layer->screen_space_transform().GetInverse( 570 bool did_invert = root_layer->screen_space_transform().GetInverse(
567 &transform_to_layer_space); 571 &transform_to_layer_space);
568 DCHECK(did_invert); 572 DCHECK(did_invert);
569 for (Region::Iterator fill_rects(fill_region); 573 for (Region::Iterator fill_rects(fill_region);
570 fill_rects.has_rect(); 574 fill_rects.has_rect();
571 fill_rects.next()) { 575 fill_rects.next()) {
572 // The root layer transform is composed of translations and scales only, 576 // The root layer transform is composed of translations and scales only,
573 // no perspective, so mapping is sufficient (as opposed to projecting). 577 // no perspective, so mapping is sufficient (as opposed to projecting).
574 gfx::Rect layer_rect = 578 gfx::Rect layer_rect =
575 MathUtil::MapClippedRect(transform_to_layer_space, fill_rects.rect()); 579 MathUtil::MapClippedRect(transform_to_layer_space, fill_rects.rect());
576 // Skip the quad culler and just append the quads directly to avoid 580 if (resource_id) {
577 // occlusion checks. 581 scoped_ptr<TextureDrawQuad> tex_quad = TextureDrawQuad::Create();
578 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create(); 582 const float vertex_opacity[4] = {1.f, 1.f, 1.f, 1.f};
579 quad->SetNew(shared_quad_state, layer_rect, screen_background_color, false); 583 tex_quad->SetNew(
580 quad_culler.Append(quad.PassAs<DrawQuad>(), &append_quads_data); 584 shared_quad_state,
585 layer_rect,
586 layer_rect,
587 resource_id,
588 false,
589 gfx::PointF(layer_rect.x() / resource_scaled_size.width(),
590 layer_rect.y() / resource_scaled_size.height()),
591 gfx::PointF(layer_rect.right() / resource_scaled_size.width(),
592 layer_rect.bottom() / resource_scaled_size.height()),
593 screen_background_color,
594 vertex_opacity,
595 false);
596 quad_culler.Append(tex_quad.PassAs<DrawQuad>(), &append_quads_data);
597 } else {
598 // Skip the quad culler and just append the quads directly to avoid
599 // occlusion checks.
600 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create();
601 quad->SetNew(
602 shared_quad_state, layer_rect, screen_background_color, false);
603 quad_culler.Append(quad.PassAs<DrawQuad>(), &append_quads_data);
604 }
581 } 605 }
582 } 606 }
583 607
584 bool LayerTreeHostImpl::CalculateRenderPasses(FrameData* frame) { 608 bool LayerTreeHostImpl::CalculateRenderPasses(FrameData* frame) {
585 DCHECK(frame->render_passes.empty()); 609 DCHECK(frame->render_passes.empty());
586 610
587 if (!CanDraw() || !active_tree_->root_layer()) 611 if (!CanDraw() || !active_tree_->root_layer())
588 return false; 612 return false;
589 613
590 TrackDamageForAllSurfaces(active_tree_->root_layer(), 614 TrackDamageForAllSurfaces(active_tree_->root_layer(),
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
782 for (size_t j = 0; j < frame->render_passes[i]->quad_list.size(); ++j) 806 for (size_t j = 0; j < frame->render_passes[i]->quad_list.size(); ++j)
783 DCHECK(frame->render_passes[i]->quad_list[j]->shared_quad_state); 807 DCHECK(frame->render_passes[i]->quad_list[j]->shared_quad_state);
784 DCHECK(frame->render_passes_by_id.find(frame->render_passes[i]->id) 808 DCHECK(frame->render_passes_by_id.find(frame->render_passes[i]->id)
785 != frame->render_passes_by_id.end()); 809 != frame->render_passes_by_id.end());
786 } 810 }
787 #endif 811 #endif
788 DCHECK(frame->render_passes.back()->output_rect.origin().IsOrigin()); 812 DCHECK(frame->render_passes.back()->output_rect.origin().IsOrigin());
789 813
790 if (!active_tree_->has_transparent_background()) { 814 if (!active_tree_->has_transparent_background()) {
791 frame->render_passes.back()->has_transparent_background = false; 815 frame->render_passes.back()->has_transparent_background = false;
792 AppendQuadsToFillScreen(frame->render_passes.back(), 816 AppendQuadsToFillScreen(ResourceIdForUIResource(overhang_ui_resource_id_),
817 gfx::ScaleSize(overhang_ui_resource_size_,
818 device_scale_factor_),
819 frame->render_passes.back(),
793 active_tree_->root_layer(), 820 active_tree_->root_layer(),
794 active_tree_->background_color(), 821 active_tree_->background_color(),
795 occlusion_tracker); 822 occlusion_tracker);
796 } 823 }
797 824
798 if (draw_frame) 825 if (draw_frame)
799 occlusion_tracker.overdraw_metrics()->RecordMetrics(this); 826 occlusion_tracker.overdraw_metrics()->RecordMetrics(this);
800 else 827 else
801 DCHECK(!have_copy_request); 828 DCHECK(!have_copy_request);
802 829
(...skipping 982 matching lines...) Expand 10 before | Expand all | Expand 10 after
1785 1812
1786 void LayerTreeHostImpl::SetOverdrawBottomHeight(float overdraw_bottom_height) { 1813 void LayerTreeHostImpl::SetOverdrawBottomHeight(float overdraw_bottom_height) {
1787 if (overdraw_bottom_height == overdraw_bottom_height_) 1814 if (overdraw_bottom_height == overdraw_bottom_height_)
1788 return; 1815 return;
1789 overdraw_bottom_height_ = overdraw_bottom_height; 1816 overdraw_bottom_height_ = overdraw_bottom_height;
1790 1817
1791 UpdateMaxScrollOffset(); 1818 UpdateMaxScrollOffset();
1792 SetFullRootLayerDamage(); 1819 SetFullRootLayerDamage();
1793 } 1820 }
1794 1821
1822 void LayerTreeHostImpl::SetOverhangUIResource(
1823 UIResourceId overhang_ui_resource_id,
1824 gfx::Size overhang_ui_resource_size) {
1825 overhang_ui_resource_id_ = overhang_ui_resource_id;
1826 overhang_ui_resource_size_ = overhang_ui_resource_size;
1827 }
1828
1795 void LayerTreeHostImpl::SetDeviceScaleFactor(float device_scale_factor) { 1829 void LayerTreeHostImpl::SetDeviceScaleFactor(float device_scale_factor) {
1796 if (device_scale_factor == device_scale_factor_) 1830 if (device_scale_factor == device_scale_factor_)
1797 return; 1831 return;
1798 device_scale_factor_ = device_scale_factor; 1832 device_scale_factor_ = device_scale_factor;
1799 1833
1800 if (renderer_) 1834 if (renderer_)
1801 renderer_->ViewportChanged(); 1835 renderer_->ViewportChanged();
1802 1836
1803 UpdateMaxScrollOffset(); 1837 UpdateMaxScrollOffset();
1804 SetFullRootLayerDamage(); 1838 SetFullRootLayerDamage();
(...skipping 772 matching lines...) Expand 10 before | Expand all | Expand 10 after
2577 2611
2578 ResourceProvider::ResourceId LayerTreeHostImpl::ResourceIdForUIResource( 2612 ResourceProvider::ResourceId LayerTreeHostImpl::ResourceIdForUIResource(
2579 UIResourceId uid) const { 2613 UIResourceId uid) const {
2580 UIResourceMap::const_iterator iter = ui_resource_map_.find(uid); 2614 UIResourceMap::const_iterator iter = ui_resource_map_.find(uid);
2581 if (iter != ui_resource_map_.end()) 2615 if (iter != ui_resource_map_.end())
2582 return iter->second; 2616 return iter->second;
2583 return 0; 2617 return 0;
2584 } 2618 }
2585 2619
2586 } // namespace cc 2620 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698