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

Side by Side Diff: gpu/command_buffer/service/client_service_map.h

Issue 2317363005: Add basic GL functionality to the passthrough command buffer. (Closed)
Patch Set: Address piman's comments. 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
OLDNEW
(Empty)
1 // Copyright (c) 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 #ifndef GPU_COMMAND_BUFFER_SERVICE_CLIENT_SERVICE_MAP_H_
6 #define GPU_COMMAND_BUFFER_SERVICE_CLIENT_SERVICE_MAP_H_
7
8 #include <limits>
9 #include <unordered_map>
10
11 namespace gpu {
12
13 namespace gles2 {
14
15 template <typename ClientType, typename ServiceType>
16 class ClientServiceMap {
17 public:
18 ClientServiceMap()
19 : client_to_service_(),
20 reserved_client_to_service_(),
21 next_service_reserved_index_(std::numeric_limits<ServiceType>::max()) {}
22
23 void SetIDMapping(ClientType client_id, ServiceType service_id) {
24 DCHECK(client_to_service_.find(client_id) == client_to_service_.end() ||
25 reserved_client_to_service_.find(client_id) !=
26 reserved_client_to_service_.end());
27 client_to_service_[client_id] = service_id;
28 reserved_client_to_service_.erase(client_id);
29 }
30
31 void RemoveClientID(ClientType client_id) {
32 client_to_service_.erase(client_id);
33 reserved_client_to_service_.erase(client_id);
34 }
35
36 void Clear() {
37 client_to_service_.clear();
38 reserved_client_to_service_.clear();
39 next_service_reserved_index_ = std::numeric_limits<ServiceType>::max();
40 }
41
42 bool GetServiceID(ClientType client_id, ServiceType* service_id) const {
43 if (client_id == 0) {
44 if (service_id) {
45 *service_id = 0;
46 }
47 return true;
48 }
49 auto iter = client_to_service_.find(client_id);
50 if (iter != client_to_service_.end()) {
51 if (service_id) {
52 *service_id = iter->second;
53 }
54 return true;
55 }
56 return false;
57 }
58
59 ServiceType GetServiceIDOrReserve(ClientType client_id) {
60 ServiceType service_id;
61 if (GetServiceID(client_id, &service_id)) {
62 return service_id;
63 }
64 return GetReservedServiceID(client_id);
65 }
66
67 typedef typename std::unordered_map<ClientType, ServiceType>::const_iterator
68 const_iterator;
69 const_iterator begin() const { return client_to_service_.begin(); }
70 const_iterator end() const { return client_to_service_.end(); }
71
72 private:
73 ServiceType GetReservedServiceID(ClientType client_id) {
74 auto iter = reserved_client_to_service_.find(client_id);
75 if (iter != reserved_client_to_service_.end()) {
76 return iter->second;
77 }
78
79 ServiceType service_id = next_service_reserved_index_--;
80 client_to_service_.erase(client_id);
81 reserved_client_to_service_[client_id] = service_id;
82 return service_id;
83 }
84
85 std::unordered_map<ClientType, ServiceType> client_to_service_;
86 std::unordered_map<ClientType, ServiceType> reserved_client_to_service_;
87 ServiceType next_service_reserved_index_;
88 };
89
90 } // namespace gles2
91 } // namespace gpu
92
93 #endif // GPU_COMMAND_BUFFER_SERVICE_CLIENT_SERVICE_MAP_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698