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

Side by Side Diff: cc/resources/ui_resource_manager.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 unified diff | Download patch
« no previous file with comments | « cc/resources/ui_resource_manager.h ('k') | cc/test/fake_layer_tree_host.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <algorithm>
6
7 #include "cc/resources/ui_resource_manager.h"
8
9 namespace cc {
10
11 UIResourceManager::UIResourceManager() : next_ui_resource_id_(1) {}
12
13 UIResourceManager::~UIResourceManager() = default;
14
15 UIResourceId UIResourceManager::CreateUIResource(UIResourceClient* client) {
16 DCHECK(client);
17
18 UIResourceId next_id = next_ui_resource_id_++;
19 DCHECK(ui_resource_client_map_.find(next_id) ==
20 ui_resource_client_map_.end());
21
22 bool resource_lost = false;
23 UIResourceRequest request(UIResourceRequest::UI_RESOURCE_CREATE, next_id,
24 client->GetBitmap(next_id, resource_lost));
25 ui_resource_request_queue_.push_back(request);
26
27 UIResourceClientData data;
28 data.client = client;
29 data.size = request.GetBitmap().GetSize();
30
31 ui_resource_client_map_[request.GetId()] = data;
32 return request.GetId();
33 }
34
35 void UIResourceManager::DeleteUIResource(UIResourceId uid) {
36 UIResourceClientMap::iterator iter = ui_resource_client_map_.find(uid);
37 if (iter == ui_resource_client_map_.end())
38 return;
39
40 UIResourceRequest request(UIResourceRequest::UI_RESOURCE_DELETE, uid);
41 ui_resource_request_queue_.push_back(request);
42 ui_resource_client_map_.erase(iter);
43 }
44
45 void UIResourceManager::RecreateUIResources() {
46 for (UIResourceClientMap::iterator iter = ui_resource_client_map_.begin();
47 iter != ui_resource_client_map_.end(); ++iter) {
48 UIResourceId uid = iter->first;
49 const UIResourceClientData& data = iter->second;
50 bool resource_lost = true;
51 auto it = std::find_if(ui_resource_request_queue_.begin(),
52 ui_resource_request_queue_.end(),
53 [uid](const UIResourceRequest& request) {
54 return request.GetId() == uid;
55 });
56 if (it == ui_resource_request_queue_.end()) {
57 UIResourceRequest request(UIResourceRequest::UI_RESOURCE_CREATE, uid,
58 data.client->GetBitmap(uid, resource_lost));
59 ui_resource_request_queue_.push_back(request);
60 }
61 }
62 }
63
64 gfx::Size UIResourceManager::GetUIResourceSize(UIResourceId uid) const {
65 UIResourceClientMap::const_iterator iter = ui_resource_client_map_.find(uid);
66 if (iter == ui_resource_client_map_.end())
67 return gfx::Size();
68
69 const UIResourceClientData& data = iter->second;
70 return data.size;
71 }
72
73 std::vector<UIResourceRequest> UIResourceManager::TakeUIResourcesRequests() {
74 UIResourceRequestQueue result;
75 result.swap(ui_resource_request_queue_);
76 return result;
77 }
78
79 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/ui_resource_manager.h ('k') | cc/test/fake_layer_tree_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698