| OLD | NEW |
| 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 #include <limits> | 8 #include <limits> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 144 // that time interval, and then uploads should have a chance to be processed. | 144 // that time interval, and then uploads should have a chance to be processed. |
| 145 size_t ms_per_frame = std::floor(1000.0 / refresh_rate); | 145 size_t ms_per_frame = std::floor(1000.0 / refresh_rate); |
| 146 size_t max_transfer_buffer_usage_bytes = | 146 size_t max_transfer_buffer_usage_bytes = |
| 147 ms_per_frame * kMaxBytesUploadedPerMs; | 147 ms_per_frame * kMaxBytesUploadedPerMs; |
| 148 | 148 |
| 149 // The context may request a lower limit based on the device capabilities. | 149 // The context may request a lower limit based on the device capabilities. |
| 150 return std::min(context_capabilities.max_transfer_buffer_usage_bytes, | 150 return std::min(context_capabilities.max_transfer_buffer_usage_bytes, |
| 151 max_transfer_buffer_usage_bytes); | 151 max_transfer_buffer_usage_bytes); |
| 152 } | 152 } |
| 153 | 153 |
| 154 unsigned GetMapImageTextureTarget( | |
| 155 const ContextProvider::Capabilities& context_capabilities) { | |
| 156 // TODO(reveman): This should be a setting passed to the compositor instead | |
| 157 // of hard-coded here. The target that need to be used depends on our choice | |
| 158 // of GpuMemoryBuffer type. Note: SURFACE_TEXTURE needs EXTERNAL_OES, | |
| 159 // IO_SURFACE needs RECTANGLE_ARB. crbug.com/431059 | |
| 160 #if defined(OS_ANDROID) | |
| 161 if (context_capabilities.gpu.egl_image_external) | |
| 162 return GL_TEXTURE_EXTERNAL_OES; | |
| 163 #endif | |
| 164 if (context_capabilities.gpu.texture_rectangle) | |
| 165 return GL_TEXTURE_RECTANGLE_ARB; | |
| 166 | |
| 167 return GL_TEXTURE_2D; | |
| 168 } | |
| 169 | |
| 170 size_t GetMaxStagingResourceCount() { | 154 size_t GetMaxStagingResourceCount() { |
| 171 // Upper bound for number of staging resource to allow. | 155 // Upper bound for number of staging resource to allow. |
| 172 return 32; | 156 return 32; |
| 173 } | 157 } |
| 174 | 158 |
| 175 } // namespace | 159 } // namespace |
| 176 | 160 |
| 177 LayerTreeHostImpl::FrameData::FrameData() : has_no_damage(false) { | 161 LayerTreeHostImpl::FrameData::FrameData() : has_no_damage(false) { |
| 178 } | 162 } |
| 179 | 163 |
| (...skipping 1818 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1998 void LayerTreeHostImpl::CreateResourceAndRasterWorkerPool( | 1982 void LayerTreeHostImpl::CreateResourceAndRasterWorkerPool( |
| 1999 scoped_ptr<RasterWorkerPool>* raster_worker_pool, | 1983 scoped_ptr<RasterWorkerPool>* raster_worker_pool, |
| 2000 scoped_ptr<ResourcePool>* resource_pool, | 1984 scoped_ptr<ResourcePool>* resource_pool, |
| 2001 scoped_ptr<ResourcePool>* staging_resource_pool) { | 1985 scoped_ptr<ResourcePool>* staging_resource_pool) { |
| 2002 base::SingleThreadTaskRunner* task_runner = | 1986 base::SingleThreadTaskRunner* task_runner = |
| 2003 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() | 1987 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() |
| 2004 : proxy_->MainThreadTaskRunner(); | 1988 : proxy_->MainThreadTaskRunner(); |
| 2005 DCHECK(task_runner); | 1989 DCHECK(task_runner); |
| 2006 | 1990 |
| 2007 ContextProvider* context_provider = output_surface_->context_provider(); | 1991 ContextProvider* context_provider = output_surface_->context_provider(); |
| 2008 bool should_use_zero_copy_rasterizer = | |
| 2009 settings_.use_zero_copy || IsSynchronousSingleThreaded(); | |
| 2010 | |
| 2011 if (!context_provider) { | 1992 if (!context_provider) { |
| 2012 *resource_pool = | 1993 *resource_pool = |
| 2013 ResourcePool::Create(resource_provider_.get(), | 1994 ResourcePool::Create(resource_provider_.get(), |
| 2014 GL_TEXTURE_2D, | 1995 GL_TEXTURE_2D, |
| 2015 resource_provider_->best_texture_format()); | 1996 resource_provider_->best_texture_format()); |
| 2016 | 1997 |
| 2017 *raster_worker_pool = | 1998 *raster_worker_pool = |
| 2018 BitmapRasterWorkerPool::Create(task_runner, | 1999 BitmapRasterWorkerPool::Create(task_runner, |
| 2019 RasterWorkerPool::GetTaskGraphRunner(), | 2000 RasterWorkerPool::GetTaskGraphRunner(), |
| 2020 resource_provider_.get()); | 2001 resource_provider_.get()); |
| 2021 } else if (use_gpu_rasterization_) { | 2002 return; |
| 2003 } |
| 2004 |
| 2005 if (use_gpu_rasterization_) { |
| 2022 *resource_pool = | 2006 *resource_pool = |
| 2023 ResourcePool::Create(resource_provider_.get(), | 2007 ResourcePool::Create(resource_provider_.get(), |
| 2024 GL_TEXTURE_2D, | 2008 GL_TEXTURE_2D, |
| 2025 resource_provider_->best_texture_format()); | 2009 resource_provider_->best_texture_format()); |
| 2026 | 2010 |
| 2027 *raster_worker_pool = | 2011 *raster_worker_pool = |
| 2028 GpuRasterWorkerPool::Create(task_runner, | 2012 GpuRasterWorkerPool::Create(task_runner, |
| 2029 context_provider, | 2013 context_provider, |
| 2030 resource_provider_.get(), | 2014 resource_provider_.get(), |
| 2031 settings_.use_distance_field_text); | 2015 settings_.use_distance_field_text); |
| 2032 } else if (should_use_zero_copy_rasterizer && CanUseZeroCopyRasterizer()) { | 2016 return; |
| 2033 *resource_pool = ResourcePool::Create( | 2017 } |
| 2034 resource_provider_.get(), | |
| 2035 GetMapImageTextureTarget(context_provider->ContextCapabilities()), | |
| 2036 resource_provider_->best_texture_format()); | |
| 2037 | 2018 |
| 2038 TaskGraphRunner* task_graph_runner; | 2019 if (GetRendererCapabilities().using_image) { |
| 2039 if (IsSynchronousSingleThreaded()) { | 2020 unsigned image_target = GL_TEXTURE_2D; |
| 2040 DCHECK(!single_thread_synchronous_task_graph_runner_); | 2021 #if defined(OS_MACOSX) |
| 2041 single_thread_synchronous_task_graph_runner_.reset(new TaskGraphRunner); | 2022 // GL_TEXTURE_RECTANGLE_ARB target is required by IOSurface backed images. |
| 2042 task_graph_runner = single_thread_synchronous_task_graph_runner_.get(); | 2023 DCHECK(context_provider->ContextCapabilities().gpu.texture_rectangle); |
| 2043 } else { | 2024 image_target = GL_TEXTURE_RECTANGLE_ARB; |
| 2044 task_graph_runner = RasterWorkerPool::GetTaskGraphRunner(); | 2025 #endif |
| 2026 if (settings_.use_image_external) { |
| 2027 DCHECK(context_provider->ContextCapabilities().gpu.egl_image_external); |
| 2028 image_target = GL_TEXTURE_EXTERNAL_OES; |
| 2045 } | 2029 } |
| 2046 | 2030 |
| 2047 *raster_worker_pool = ZeroCopyRasterWorkerPool::Create( | 2031 if (settings_.use_zero_copy || IsSynchronousSingleThreaded()) { |
| 2048 task_runner, task_graph_runner, resource_provider_.get()); | 2032 *resource_pool = |
| 2049 } else if (settings_.use_one_copy && CanUseOneCopyRasterizer()) { | 2033 ResourcePool::Create(resource_provider_.get(), image_target, |
| 2050 // We need to create a staging resource pool when using copy rasterizer. | 2034 resource_provider_->best_texture_format()); |
| 2051 *staging_resource_pool = ResourcePool::Create( | |
| 2052 resource_provider_.get(), | |
| 2053 GetMapImageTextureTarget(context_provider->ContextCapabilities()), | |
| 2054 resource_provider_->best_texture_format()); | |
| 2055 *resource_pool = | |
| 2056 ResourcePool::Create(resource_provider_.get(), | |
| 2057 GL_TEXTURE_2D, | |
| 2058 resource_provider_->best_texture_format()); | |
| 2059 | 2035 |
| 2060 *raster_worker_pool = | 2036 TaskGraphRunner* task_graph_runner; |
| 2061 OneCopyRasterWorkerPool::Create(task_runner, | 2037 if (IsSynchronousSingleThreaded()) { |
| 2062 RasterWorkerPool::GetTaskGraphRunner(), | 2038 DCHECK(!single_thread_synchronous_task_graph_runner_); |
| 2063 context_provider, | 2039 single_thread_synchronous_task_graph_runner_.reset(new TaskGraphRunner); |
| 2064 resource_provider_.get(), | 2040 task_graph_runner = single_thread_synchronous_task_graph_runner_.get(); |
| 2065 staging_resource_pool_.get()); | 2041 } else { |
| 2066 } else { | 2042 task_graph_runner = RasterWorkerPool::GetTaskGraphRunner(); |
| 2067 *resource_pool = ResourcePool::Create( | 2043 } |
| 2068 resource_provider_.get(), | |
| 2069 GL_TEXTURE_2D, | |
| 2070 resource_provider_->memory_efficient_texture_format()); | |
| 2071 | 2044 |
| 2072 *raster_worker_pool = PixelBufferRasterWorkerPool::Create( | 2045 *raster_worker_pool = ZeroCopyRasterWorkerPool::Create( |
| 2073 task_runner, RasterWorkerPool::GetTaskGraphRunner(), context_provider, | 2046 task_runner, task_graph_runner, resource_provider_.get()); |
| 2074 resource_provider_.get(), | 2047 return; |
| 2075 GetMaxTransferBufferUsageBytes( | 2048 } |
| 2076 context_provider->ContextCapabilities(), | 2049 |
| 2077 settings_.renderer_settings.refresh_rate)); | 2050 if (settings_.use_one_copy) { |
| 2051 // We need to create a staging resource pool when using copy rasterizer. |
| 2052 *staging_resource_pool = |
| 2053 ResourcePool::Create(resource_provider_.get(), image_target, |
| 2054 resource_provider_->best_texture_format()); |
| 2055 *resource_pool = |
| 2056 ResourcePool::Create(resource_provider_.get(), GL_TEXTURE_2D, |
| 2057 resource_provider_->best_texture_format()); |
| 2058 |
| 2059 *raster_worker_pool = OneCopyRasterWorkerPool::Create( |
| 2060 task_runner, RasterWorkerPool::GetTaskGraphRunner(), context_provider, |
| 2061 resource_provider_.get(), staging_resource_pool_.get()); |
| 2062 return; |
| 2063 } |
| 2078 } | 2064 } |
| 2065 |
| 2066 *resource_pool = ResourcePool::Create( |
| 2067 resource_provider_.get(), GL_TEXTURE_2D, |
| 2068 resource_provider_->memory_efficient_texture_format()); |
| 2069 |
| 2070 *raster_worker_pool = PixelBufferRasterWorkerPool::Create( |
| 2071 task_runner, RasterWorkerPool::GetTaskGraphRunner(), context_provider, |
| 2072 resource_provider_.get(), |
| 2073 GetMaxTransferBufferUsageBytes(context_provider->ContextCapabilities(), |
| 2074 settings_.renderer_settings.refresh_rate)); |
| 2079 } | 2075 } |
| 2080 | 2076 |
| 2081 void LayerTreeHostImpl::DestroyTileManager() { | 2077 void LayerTreeHostImpl::DestroyTileManager() { |
| 2082 tile_manager_ = nullptr; | 2078 tile_manager_ = nullptr; |
| 2083 resource_pool_ = nullptr; | 2079 resource_pool_ = nullptr; |
| 2084 staging_resource_pool_ = nullptr; | 2080 staging_resource_pool_ = nullptr; |
| 2085 raster_worker_pool_ = nullptr; | 2081 raster_worker_pool_ = nullptr; |
| 2086 single_thread_synchronous_task_graph_runner_ = nullptr; | 2082 single_thread_synchronous_task_graph_runner_ = nullptr; |
| 2087 } | 2083 } |
| 2088 | 2084 |
| 2089 bool LayerTreeHostImpl::UsePendingTreeForSync() const { | 2085 bool LayerTreeHostImpl::UsePendingTreeForSync() const { |
| 2090 // In impl-side painting, synchronize to the pending tree so that it has | 2086 // In impl-side painting, synchronize to the pending tree so that it has |
| 2091 // time to raster before being displayed. | 2087 // time to raster before being displayed. |
| 2092 return settings_.impl_side_painting; | 2088 return settings_.impl_side_painting; |
| 2093 } | 2089 } |
| 2094 | 2090 |
| 2095 bool LayerTreeHostImpl::IsSynchronousSingleThreaded() const { | 2091 bool LayerTreeHostImpl::IsSynchronousSingleThreaded() const { |
| 2096 return !proxy_->HasImplThread() && !settings_.single_thread_proxy_scheduler; | 2092 return !proxy_->HasImplThread() && !settings_.single_thread_proxy_scheduler; |
| 2097 } | 2093 } |
| 2098 | 2094 |
| 2099 bool LayerTreeHostImpl::CanUseZeroCopyRasterizer() const { | |
| 2100 return GetRendererCapabilities().using_image; | |
| 2101 } | |
| 2102 | |
| 2103 bool LayerTreeHostImpl::CanUseOneCopyRasterizer() const { | |
| 2104 return GetRendererCapabilities().using_image; | |
| 2105 } | |
| 2106 | |
| 2107 void LayerTreeHostImpl::EnforceZeroBudget(bool zero_budget) { | 2095 void LayerTreeHostImpl::EnforceZeroBudget(bool zero_budget) { |
| 2108 SetManagedMemoryPolicy(cached_managed_memory_policy_, zero_budget); | 2096 SetManagedMemoryPolicy(cached_managed_memory_policy_, zero_budget); |
| 2109 } | 2097 } |
| 2110 | 2098 |
| 2111 bool LayerTreeHostImpl::InitializeRenderer( | 2099 bool LayerTreeHostImpl::InitializeRenderer( |
| 2112 scoped_ptr<OutputSurface> output_surface) { | 2100 scoped_ptr<OutputSurface> output_surface) { |
| 2113 TRACE_EVENT0("cc", "LayerTreeHostImpl::InitializeRenderer"); | 2101 TRACE_EVENT0("cc", "LayerTreeHostImpl::InitializeRenderer"); |
| 2114 | 2102 |
| 2115 // Since we will create a new resource provider, we cannot continue to use | 2103 // Since we will create a new resource provider, we cannot continue to use |
| 2116 // the old resources (i.e. render_surfaces and texture IDs). Clear them | 2104 // the old resources (i.e. render_surfaces and texture IDs). Clear them |
| (...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2556 &end_clipped); | 2544 &end_clipped); |
| 2557 DCHECK(!end_clipped); | 2545 DCHECK(!end_clipped); |
| 2558 if (end_clipped) | 2546 if (end_clipped) |
| 2559 return gfx::Vector2dF(); | 2547 return gfx::Vector2dF(); |
| 2560 gfx::PointF actual_viewport_end_point = | 2548 gfx::PointF actual_viewport_end_point = |
| 2561 gfx::ScalePoint(actual_screen_space_end_point, | 2549 gfx::ScalePoint(actual_screen_space_end_point, |
| 2562 1.f / scale_from_viewport_to_screen_space); | 2550 1.f / scale_from_viewport_to_screen_space); |
| 2563 return actual_viewport_end_point - viewport_point; | 2551 return actual_viewport_end_point - viewport_point; |
| 2564 } | 2552 } |
| 2565 | 2553 |
| 2566 static gfx::Vector2dF ScrollLayerWithLocalDelta(LayerImpl* layer_impl, | 2554 static gfx::Vector2dF ScrollLayerWithLocalDelta( |
| 2567 const gfx::Vector2dF& local_delta) { | 2555 LayerImpl* layer_impl, |
| 2556 const gfx::Vector2dF& local_delta, |
| 2557 float page_scale_factor) { |
| 2568 gfx::Vector2dF previous_delta(layer_impl->ScrollDelta()); | 2558 gfx::Vector2dF previous_delta(layer_impl->ScrollDelta()); |
| 2569 layer_impl->ScrollBy(local_delta); | 2559 gfx::Vector2dF delta = local_delta; |
| 2560 delta.Scale(1.f / page_scale_factor); |
| 2561 layer_impl->ScrollBy(delta); |
| 2570 return layer_impl->ScrollDelta() - previous_delta; | 2562 return layer_impl->ScrollDelta() - previous_delta; |
| 2571 } | 2563 } |
| 2572 | 2564 |
| 2573 bool LayerTreeHostImpl::ShouldTopControlsConsumeScroll( | 2565 bool LayerTreeHostImpl::ShouldTopControlsConsumeScroll( |
| 2574 const gfx::Vector2dF& scroll_delta) const { | 2566 const gfx::Vector2dF& scroll_delta) const { |
| 2575 DCHECK(CurrentlyScrollingLayer()); | 2567 DCHECK(CurrentlyScrollingLayer()); |
| 2576 | 2568 |
| 2577 if (!top_controls_manager_) | 2569 if (!top_controls_manager_) |
| 2578 return false; | 2570 return false; |
| 2579 | 2571 |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2637 } | 2629 } |
| 2638 // Track root layer deltas for reporting overscroll. | 2630 // Track root layer deltas for reporting overscroll. |
| 2639 if (layer_impl == InnerViewportScrollLayer()) | 2631 if (layer_impl == InnerViewportScrollLayer()) |
| 2640 unused_root_delta = pending_delta; | 2632 unused_root_delta = pending_delta; |
| 2641 } | 2633 } |
| 2642 | 2634 |
| 2643 gfx::Vector2dF applied_delta; | 2635 gfx::Vector2dF applied_delta; |
| 2644 // Gesture events need to be transformed from viewport coordinates to local | 2636 // Gesture events need to be transformed from viewport coordinates to local |
| 2645 // layer coordinates so that the scrolling contents exactly follow the | 2637 // layer coordinates so that the scrolling contents exactly follow the |
| 2646 // user's finger. In contrast, wheel events represent a fixed amount of | 2638 // user's finger. In contrast, wheel events represent a fixed amount of |
| 2647 // scrolling so we can just apply them directly. | 2639 // scrolling so we can just apply them directly, but the page scale factor |
| 2640 // is applied to the scroll delta. |
| 2648 if (!wheel_scrolling_) { | 2641 if (!wheel_scrolling_) { |
| 2649 float scale_from_viewport_to_screen_space = device_scale_factor_; | 2642 float scale_from_viewport_to_screen_space = device_scale_factor_; |
| 2650 applied_delta = | 2643 applied_delta = |
| 2651 ScrollLayerWithViewportSpaceDelta(layer_impl, | 2644 ScrollLayerWithViewportSpaceDelta(layer_impl, |
| 2652 scale_from_viewport_to_screen_space, | 2645 scale_from_viewport_to_screen_space, |
| 2653 viewport_point, pending_delta); | 2646 viewport_point, pending_delta); |
| 2654 } else { | 2647 } else { |
| 2655 applied_delta = ScrollLayerWithLocalDelta(layer_impl, pending_delta); | 2648 applied_delta = ScrollLayerWithLocalDelta( |
| 2649 layer_impl, pending_delta, active_tree_->total_page_scale_factor()); |
| 2656 } | 2650 } |
| 2657 | 2651 |
| 2658 const float kEpsilon = 0.1f; | 2652 const float kEpsilon = 0.1f; |
| 2659 if (layer_impl == InnerViewportScrollLayer()) { | 2653 if (layer_impl == InnerViewportScrollLayer()) { |
| 2660 unused_root_delta.Subtract(applied_delta); | 2654 unused_root_delta.Subtract(applied_delta); |
| 2661 if (std::abs(unused_root_delta.x()) < kEpsilon) | 2655 if (std::abs(unused_root_delta.x()) < kEpsilon) |
| 2662 unused_root_delta.set_x(0.0f); | 2656 unused_root_delta.set_x(0.0f); |
| 2663 if (std::abs(unused_root_delta.y()) < kEpsilon) | 2657 if (std::abs(unused_root_delta.y()) < kEpsilon) |
| 2664 unused_root_delta.set_y(0.0f); | 2658 unused_root_delta.set_y(0.0f); |
| 2665 // Disable overscroll on axes which is impossible to scroll. | 2659 // Disable overscroll on axes which is impossible to scroll. |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2767 float height = layer_impl->clip_height(); | 2761 float height = layer_impl->clip_height(); |
| 2768 | 2762 |
| 2769 // These magical values match WebKit and are designed to scroll nearly the | 2763 // These magical values match WebKit and are designed to scroll nearly the |
| 2770 // entire visible content height but leave a bit of overlap. | 2764 // entire visible content height but leave a bit of overlap. |
| 2771 float page = std::max(height * 0.875f, 1.f); | 2765 float page = std::max(height * 0.875f, 1.f); |
| 2772 if (direction == SCROLL_BACKWARD) | 2766 if (direction == SCROLL_BACKWARD) |
| 2773 page = -page; | 2767 page = -page; |
| 2774 | 2768 |
| 2775 gfx::Vector2dF delta = gfx::Vector2dF(0.f, page); | 2769 gfx::Vector2dF delta = gfx::Vector2dF(0.f, page); |
| 2776 | 2770 |
| 2777 gfx::Vector2dF applied_delta = ScrollLayerWithLocalDelta(layer_impl, delta); | 2771 gfx::Vector2dF applied_delta = |
| 2772 ScrollLayerWithLocalDelta(layer_impl, delta, 1.f); |
| 2778 | 2773 |
| 2779 if (!applied_delta.IsZero()) { | 2774 if (!applied_delta.IsZero()) { |
| 2780 client_->SetNeedsCommitOnImplThread(); | 2775 client_->SetNeedsCommitOnImplThread(); |
| 2781 SetNeedsRedraw(); | 2776 SetNeedsRedraw(); |
| 2782 client_->RenewTreePriority(); | 2777 client_->RenewTreePriority(); |
| 2783 return true; | 2778 return true; |
| 2784 } | 2779 } |
| 2785 | 2780 |
| 2786 active_tree_->SetCurrentlyScrollingLayer(layer_impl); | 2781 active_tree_->SetCurrentlyScrollingLayer(layer_impl); |
| 2787 } | 2782 } |
| (...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3244 void LayerTreeHostImpl::ResetCurrentBeginFrameArgsForNextFrame() { | 3239 void LayerTreeHostImpl::ResetCurrentBeginFrameArgsForNextFrame() { |
| 3245 current_begin_frame_args_ = BeginFrameArgs(); | 3240 current_begin_frame_args_ = BeginFrameArgs(); |
| 3246 } | 3241 } |
| 3247 | 3242 |
| 3248 BeginFrameArgs LayerTreeHostImpl::CurrentBeginFrameArgs() const { | 3243 BeginFrameArgs LayerTreeHostImpl::CurrentBeginFrameArgs() const { |
| 3249 // Try to use the current frame time to keep animations non-jittery. But if | 3244 // Try to use the current frame time to keep animations non-jittery. But if |
| 3250 // we're not in a frame (because this is during an input event or a delayed | 3245 // we're not in a frame (because this is during an input event or a delayed |
| 3251 // task), fall back to physical time. This should still be monotonic. | 3246 // task), fall back to physical time. This should still be monotonic. |
| 3252 if (current_begin_frame_args_.IsValid()) | 3247 if (current_begin_frame_args_.IsValid()) |
| 3253 return current_begin_frame_args_; | 3248 return current_begin_frame_args_; |
| 3254 return BeginFrameArgs::Create(gfx::FrameTime::Now(), base::TimeTicks(), | 3249 return BeginFrameArgs::Create( |
| 3255 BeginFrameArgs::DefaultInterval(), | 3250 BEGINFRAME_FROM_HERE, gfx::FrameTime::Now(), base::TimeTicks(), |
| 3256 BeginFrameArgs::NORMAL); | 3251 BeginFrameArgs::DefaultInterval(), BeginFrameArgs::NORMAL); |
| 3257 } | 3252 } |
| 3258 | 3253 |
| 3259 scoped_refptr<base::debug::ConvertableToTraceFormat> | 3254 scoped_refptr<base::debug::ConvertableToTraceFormat> |
| 3260 LayerTreeHostImpl::AsValue() const { | 3255 LayerTreeHostImpl::AsValue() const { |
| 3261 return AsValueWithFrame(NULL); | 3256 return AsValueWithFrame(NULL); |
| 3262 } | 3257 } |
| 3263 | 3258 |
| 3264 scoped_refptr<base::debug::ConvertableToTraceFormat> | 3259 scoped_refptr<base::debug::ConvertableToTraceFormat> |
| 3265 LayerTreeHostImpl::AsValueWithFrame(FrameData* frame) const { | 3260 LayerTreeHostImpl::AsValueWithFrame(FrameData* frame) const { |
| 3266 scoped_refptr<base::debug::TracedValue> state = | 3261 scoped_refptr<base::debug::TracedValue> state = |
| (...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3491 } | 3486 } |
| 3492 | 3487 |
| 3493 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { | 3488 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { |
| 3494 std::vector<PictureLayerImpl*>::iterator it = | 3489 std::vector<PictureLayerImpl*>::iterator it = |
| 3495 std::find(picture_layers_.begin(), picture_layers_.end(), layer); | 3490 std::find(picture_layers_.begin(), picture_layers_.end(), layer); |
| 3496 DCHECK(it != picture_layers_.end()); | 3491 DCHECK(it != picture_layers_.end()); |
| 3497 picture_layers_.erase(it); | 3492 picture_layers_.erase(it); |
| 3498 } | 3493 } |
| 3499 | 3494 |
| 3500 } // namespace cc | 3495 } // namespace cc |
| OLD | NEW |