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

Unified Diff: cc/trees/layer_tree_host.cc

Issue 2322943003: cc: Move UI Resource management out of LayerTreeHost. (Closed)
Patch Set: virtual dtor Created 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/trees/layer_tree_host.h ('k') | cc/trees/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/trees/layer_tree_host.cc
diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc
index bc11de06410d90945342fee45be1d815d34eb01c..19763849610af11f7614e142c0cfd8f5eada6edf 100644
--- a/cc/trees/layer_tree_host.cc
+++ b/cc/trees/layer_tree_host.cc
@@ -48,7 +48,7 @@
#include "cc/proto/gfx_conversions.h"
#include "cc/proto/layer_tree.pb.h"
#include "cc/proto/layer_tree_host.pb.h"
-#include "cc/resources/ui_resource_request.h"
+#include "cc/resources/ui_resource_manager.h"
#include "cc/scheduler/begin_frame_source.h"
#include "cc/trees/draw_property_utils.h"
#include "cc/trees/layer_tree_host_client.h"
@@ -210,8 +210,8 @@ LayerTreeHost::LayerTreeHost(InitParams* params,
std::unique_ptr<LayerTree> layer_tree)
: micro_benchmark_controller_(this),
layer_tree_(std::move(layer_tree)),
- next_ui_resource_id_(1),
compositor_mode_(mode),
+ ui_resource_manager_(base::MakeUnique<UIResourceManager>()),
client_(params->client),
source_frame_number_(0),
rendering_stats_instrumentation_(RenderingStatsInstrumentation::Create()),
@@ -326,6 +326,11 @@ void LayerTreeHost::SetTaskRunnerProviderForTesting(
task_runner_provider_ = std::move(task_runner_provider);
}
+void LayerTreeHost::SetUIResourceManagerForTesting(
+ std::unique_ptr<UIResourceManager> ui_resource_manager) {
+ ui_resource_manager_ = std::move(ui_resource_manager);
+}
+
void LayerTreeHost::InitializeProxy(
std::unique_ptr<Proxy> proxy,
std::unique_ptr<BeginFrameSource> external_begin_frame_source) {
@@ -374,6 +379,10 @@ const LayerTree* LayerTreeHost::GetLayerTree() const {
return layer_tree_.get();
}
+UIResourceManager* LayerTreeHost::GetUIResourceManager() const {
+ return ui_resource_manager_.get();
+}
+
TaskRunnerProvider* LayerTreeHost::GetTaskRunnerProvider() const {
return task_runner_provider_.get();
}
@@ -460,10 +469,8 @@ void LayerTreeHost::FinishCommitOnImplThread(LayerTreeHostImpl* host_impl) {
sync_tree->SetDeviceScaleFactor(layer_tree_->device_scale_factor());
host_impl->SetDebugState(debug_state_);
- if (!ui_resource_request_queue_.empty()) {
- sync_tree->set_ui_resource_request_queue(ui_resource_request_queue_);
- ui_resource_request_queue_.clear();
- }
+ sync_tree->set_ui_resource_request_queue(
+ ui_resource_manager_->TakeUIResourcesRequests());
{
TRACE_EVENT0("cc", "LayerTreeHost::PushProperties");
@@ -912,67 +919,6 @@ void LayerTreeHost::AnimateLayers(base::TimeTicks monotonic_time) {
layer_tree_->property_trees()->needs_rebuild = true;
}
-UIResourceId LayerTreeHost::CreateUIResource(UIResourceClient* client) {
- DCHECK(client);
-
- UIResourceId next_id = next_ui_resource_id_++;
- DCHECK(ui_resource_client_map_.find(next_id) ==
- ui_resource_client_map_.end());
-
- bool resource_lost = false;
- UIResourceRequest request(UIResourceRequest::UI_RESOURCE_CREATE, next_id,
- client->GetBitmap(next_id, resource_lost));
- ui_resource_request_queue_.push_back(request);
-
- UIResourceClientData data;
- data.client = client;
- data.size = request.GetBitmap().GetSize();
-
- ui_resource_client_map_[request.GetId()] = data;
- return request.GetId();
-}
-
-// Deletes a UI resource. May safely be called more than once.
-void LayerTreeHost::DeleteUIResource(UIResourceId uid) {
- UIResourceClientMap::iterator iter = ui_resource_client_map_.find(uid);
- if (iter == ui_resource_client_map_.end())
- return;
-
- UIResourceRequest request(UIResourceRequest::UI_RESOURCE_DELETE, uid);
- ui_resource_request_queue_.push_back(request);
- ui_resource_client_map_.erase(iter);
-}
-
-void LayerTreeHost::RecreateUIResources() {
- for (UIResourceClientMap::iterator iter = ui_resource_client_map_.begin();
- iter != ui_resource_client_map_.end();
- ++iter) {
- UIResourceId uid = iter->first;
- const UIResourceClientData& data = iter->second;
- bool resource_lost = true;
- auto it = std::find_if(ui_resource_request_queue_.begin(),
- ui_resource_request_queue_.end(),
- [uid](const UIResourceRequest& request) {
- return request.GetId() == uid;
- });
- if (it == ui_resource_request_queue_.end()) {
- UIResourceRequest request(UIResourceRequest::UI_RESOURCE_CREATE, uid,
- data.client->GetBitmap(uid, resource_lost));
- ui_resource_request_queue_.push_back(request);
- }
- }
-}
-
-// Returns the size of a resource given its id.
-gfx::Size LayerTreeHost::GetUIResourceSize(UIResourceId uid) const {
- UIResourceClientMap::const_iterator iter = ui_resource_client_map_.find(uid);
- if (iter == ui_resource_client_map_.end())
- return gfx::Size();
-
- const UIResourceClientData& data = iter->second;
- return data.size;
-}
-
int LayerTreeHost::ScheduleMicroBenchmark(
const std::string& benchmark_name,
std::unique_ptr<base::Value> value,
« no previous file with comments | « cc/trees/layer_tree_host.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