Chromium Code Reviews| 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 | 9 |
| 9 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| 10 #include "base/containers/hash_tables.h" | 11 #include "base/containers/hash_tables.h" |
| 11 #include "base/json/json_writer.h" | 12 #include "base/json/json_writer.h" |
| 12 #include "base/metrics/histogram.h" | 13 #include "base/metrics/histogram.h" |
| 13 #include "base/stl_util.h" | 14 #include "base/stl_util.h" |
| 14 #include "base/strings/stringprintf.h" | 15 #include "base/strings/stringprintf.h" |
| 15 #include "cc/animation/scrollbar_animation_controller.h" | 16 #include "cc/animation/scrollbar_animation_controller.h" |
| 16 #include "cc/animation/timing_function.h" | 17 #include "cc/animation/timing_function.h" |
| 17 #include "cc/base/math_util.h" | 18 #include "cc/base/math_util.h" |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 62 "LayerTreeHostImpl::SetVisible", | 63 "LayerTreeHostImpl::SetVisible", |
| 63 id, | 64 id, |
| 64 "LayerTreeHostImpl", | 65 "LayerTreeHostImpl", |
| 65 id); | 66 id); |
| 66 return; | 67 return; |
| 67 } | 68 } |
| 68 | 69 |
| 69 TRACE_EVENT_ASYNC_END0("webkit", "LayerTreeHostImpl::SetVisible", id); | 70 TRACE_EVENT_ASYNC_END0("webkit", "LayerTreeHostImpl::SetVisible", id); |
| 70 } | 71 } |
| 71 | 72 |
| 73 size_t GetMaxBytesPendingUpload(cc::ContextProvider* context_provider) { | |
|
reveman
2013/09/05 17:52:10
GetMaxTransferBufferUsageBytes instead please and
| |
| 74 if (context_provider != NULL) { | |
|
reveman
2013/09/03 22:01:50
is this really the correct way to determine the li
danakj
2013/09/03 22:19:25
AIUI This limit is how much the compositor should
reveman
2013/09/04 23:22:15
we should always be using std::numeric_limits<size
danakj
2013/09/05 14:36:17
We don't recreate the TileManager when we draw a s
reveman
2013/09/05 15:32:14
Hm, we're still using the tile manager to initiali
danakj
2013/09/05 15:35:07
No, resourceless software mode means there are no
reveman
2013/09/05 17:52:10
Ok, got it.
nit: "if (context_provider)" instead
kaanb
2013/09/05 19:26:57
Done.
| |
| 75 // For reference Chromebook Pixel can upload 1MB in about 0.5ms. | |
| 76 const size_t kMaxBytesUploadedPerMs = 1024 * 1024 * 2; | |
|
reveman
2013/09/03 22:01:50
nit: kMaxTransferBufferUsageBytes here and below
kaanb
2013/09/03 23:09:29
Done.
kaanb
2013/09/05 19:26:57
On 2013/09/03 23:09:29, kaanb wrote:
> On 2013/09/
| |
| 77 // Assuming a two frame deep pipeline between CPU and GPU and we are | |
| 78 // drawing 60 frames per second which would require us to draw one | |
| 79 // frame in 16 milliseconds. | |
| 80 const size_t kMaxBytesPendingUpload = 16 * 2 * kMaxBytesUploadedPerMs; | |
| 81 return std::min( | |
| 82 context_provider->ContextCapabilities().max_transfer_buffer_usage_bytes, | |
| 83 kMaxBytesPendingUpload); | |
| 84 } else { | |
| 85 // Software compositing should not use this path in production. Just use a | |
|
danakj
2013/09/03 21:48:29
s/path/value/
kaanb
2013/09/03 23:09:29
Done.
| |
| 86 // default value when testing this path with software compositor. | |
|
danakj
2013/09/03 21:48:29
...when testing uploads with the software composit
kaanb
2013/09/03 23:09:29
Done.
| |
| 87 return std::numeric_limits<size_t>::max(); | |
| 88 } | |
| 89 } | |
| 90 | |
| 72 } // namespace | 91 } // namespace |
| 73 | 92 |
| 74 namespace cc { | 93 namespace cc { |
| 75 | 94 |
| 76 class LayerTreeHostImplTimeSourceAdapter : public TimeSourceClient { | 95 class LayerTreeHostImplTimeSourceAdapter : public TimeSourceClient { |
| 77 public: | 96 public: |
| 78 static scoped_ptr<LayerTreeHostImplTimeSourceAdapter> Create( | 97 static scoped_ptr<LayerTreeHostImplTimeSourceAdapter> Create( |
| 79 LayerTreeHostImpl* layer_tree_host_impl, | 98 LayerTreeHostImpl* layer_tree_host_impl, |
| 80 scoped_refptr<DelayBasedTimeSource> time_source) { | 99 scoped_refptr<DelayBasedTimeSource> time_source) { |
| 81 return make_scoped_ptr( | 100 return make_scoped_ptr( |
| (...skipping 1505 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1587 } | 1606 } |
| 1588 | 1607 |
| 1589 if (renderer_) { | 1608 if (renderer_) { |
| 1590 renderer_->SetVisible(visible_); | 1609 renderer_->SetVisible(visible_); |
| 1591 SetFullRootLayerDamage(); | 1610 SetFullRootLayerDamage(); |
| 1592 } | 1611 } |
| 1593 } | 1612 } |
| 1594 | 1613 |
| 1595 void LayerTreeHostImpl::CreateAndSetTileManager( | 1614 void LayerTreeHostImpl::CreateAndSetTileManager( |
| 1596 ResourceProvider* resource_provider, | 1615 ResourceProvider* resource_provider, |
| 1597 bool using_map_image) { | 1616 bool using_map_image, |
| 1617 ContextProvider* context_provider) { | |
| 1598 DCHECK(settings_.impl_side_painting); | 1618 DCHECK(settings_.impl_side_painting); |
| 1599 DCHECK(resource_provider); | 1619 DCHECK(resource_provider); |
| 1600 tile_manager_ = TileManager::Create(this, | 1620 tile_manager_ = |
| 1601 resource_provider, | 1621 TileManager::Create(this, |
| 1602 settings_.num_raster_threads, | 1622 resource_provider, |
| 1603 rendering_stats_instrumentation_, | 1623 settings_.num_raster_threads, |
| 1604 using_map_image); | 1624 rendering_stats_instrumentation_, |
| 1625 using_map_image, | |
| 1626 GetMaxBytesPendingUpload(context_provider)); | |
| 1627 | |
| 1605 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); | 1628 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); |
| 1606 need_to_update_visible_tiles_before_draw_ = false; | 1629 need_to_update_visible_tiles_before_draw_ = false; |
| 1607 } | 1630 } |
| 1608 | 1631 |
| 1609 void LayerTreeHostImpl::EnforceZeroBudget(bool zero_budget) { | 1632 void LayerTreeHostImpl::EnforceZeroBudget(bool zero_budget) { |
| 1610 SetManagedMemoryPolicy(cached_managed_memory_policy_, zero_budget); | 1633 SetManagedMemoryPolicy(cached_managed_memory_policy_, zero_budget); |
| 1611 } | 1634 } |
| 1612 | 1635 |
| 1613 bool LayerTreeHostImpl::InitializeRenderer( | 1636 bool LayerTreeHostImpl::InitializeRenderer( |
| 1614 scoped_ptr<OutputSurface> output_surface) { | 1637 scoped_ptr<OutputSurface> output_surface) { |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 1638 | 1661 |
| 1639 bool skip_gl_renderer = false; | 1662 bool skip_gl_renderer = false; |
| 1640 CreateAndSetRenderer( | 1663 CreateAndSetRenderer( |
| 1641 output_surface.get(), resource_provider.get(), skip_gl_renderer); | 1664 output_surface.get(), resource_provider.get(), skip_gl_renderer); |
| 1642 | 1665 |
| 1643 if (!renderer_) | 1666 if (!renderer_) |
| 1644 return false; | 1667 return false; |
| 1645 | 1668 |
| 1646 if (settings_.impl_side_painting) { | 1669 if (settings_.impl_side_painting) { |
| 1647 CreateAndSetTileManager(resource_provider.get(), | 1670 CreateAndSetTileManager(resource_provider.get(), |
| 1648 GetRendererCapabilities().using_map_image); | 1671 GetRendererCapabilities().using_map_image, |
| 1672 output_surface->context_provider().get()); | |
| 1649 } | 1673 } |
| 1650 | 1674 |
| 1651 // Setup BeginFrameEmulation if it's not supported natively | 1675 // Setup BeginFrameEmulation if it's not supported natively |
| 1652 if (!settings_.begin_frame_scheduling_enabled) { | 1676 if (!settings_.begin_frame_scheduling_enabled) { |
| 1653 const base::TimeDelta display_refresh_interval = | 1677 const base::TimeDelta display_refresh_interval = |
| 1654 base::TimeDelta::FromMicroseconds( | 1678 base::TimeDelta::FromMicroseconds( |
| 1655 base::Time::kMicrosecondsPerSecond / | 1679 base::Time::kMicrosecondsPerSecond / |
| 1656 settings_.refresh_rate); | 1680 settings_.refresh_rate); |
| 1657 | 1681 |
| 1658 output_surface->InitializeBeginFrameEmulation( | 1682 output_surface->InitializeBeginFrameEmulation( |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1750 tile_manager_.reset(); | 1774 tile_manager_.reset(); |
| 1751 resource_provider_->InitializeSoftware(); | 1775 resource_provider_->InitializeSoftware(); |
| 1752 | 1776 |
| 1753 bool skip_gl_renderer = true; | 1777 bool skip_gl_renderer = true; |
| 1754 CreateAndSetRenderer( | 1778 CreateAndSetRenderer( |
| 1755 output_surface_.get(), resource_provider_.get(), skip_gl_renderer); | 1779 output_surface_.get(), resource_provider_.get(), skip_gl_renderer); |
| 1756 DCHECK(renderer_); | 1780 DCHECK(renderer_); |
| 1757 | 1781 |
| 1758 EnforceZeroBudget(true); | 1782 EnforceZeroBudget(true); |
| 1759 CreateAndSetTileManager(resource_provider_.get(), | 1783 CreateAndSetTileManager(resource_provider_.get(), |
| 1760 GetRendererCapabilities().using_map_image); | 1784 GetRendererCapabilities().using_map_image, |
| 1785 NULL); | |
| 1786 | |
| 1761 DCHECK(tile_manager_); | 1787 DCHECK(tile_manager_); |
| 1762 | 1788 |
| 1763 SetOffscreenContextProvider(NULL); | 1789 SetOffscreenContextProvider(NULL); |
| 1764 | 1790 |
| 1765 client_->SetNeedsCommitOnImplThread(); | 1791 client_->SetNeedsCommitOnImplThread(); |
| 1766 } | 1792 } |
| 1767 | 1793 |
| 1768 void LayerTreeHostImpl::SetViewportSize(gfx::Size device_viewport_size) { | 1794 void LayerTreeHostImpl::SetViewportSize(gfx::Size device_viewport_size) { |
| 1769 if (device_viewport_size == device_viewport_size_) | 1795 if (device_viewport_size == device_viewport_size_) |
| 1770 return; | 1796 return; |
| (...skipping 806 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2577 | 2603 |
| 2578 ResourceProvider::ResourceId LayerTreeHostImpl::ResourceIdForUIResource( | 2604 ResourceProvider::ResourceId LayerTreeHostImpl::ResourceIdForUIResource( |
| 2579 UIResourceId uid) const { | 2605 UIResourceId uid) const { |
| 2580 UIResourceMap::const_iterator iter = ui_resource_map_.find(uid); | 2606 UIResourceMap::const_iterator iter = ui_resource_map_.find(uid); |
| 2581 if (iter != ui_resource_map_.end()) | 2607 if (iter != ui_resource_map_.end()) |
| 2582 return iter->second; | 2608 return iter->second; |
| 2583 return 0; | 2609 return 0; |
| 2584 } | 2610 } |
| 2585 | 2611 |
| 2586 } // namespace cc | 2612 } // namespace cc |
| OLD | NEW |