| Index: gpu/command_buffer/service/valuebuffer_manager.cc
|
| diff --git a/gpu/command_buffer/service/valuebuffer_manager.cc b/gpu/command_buffer/service/valuebuffer_manager.cc
|
| index eb4db093f70211d15af73cc3531979480ae6d33d..21de3f88831c706d20e03fcd7289f3b135dc54a6 100644
|
| --- a/gpu/command_buffer/service/valuebuffer_manager.cc
|
| +++ b/gpu/command_buffer/service/valuebuffer_manager.cc
|
| @@ -2,16 +2,17 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "gpu/command_buffer/service/valuebuffer_manager.h"
|
| -
|
| +#include "gpu/command_buffer/service/gl_utils.h"
|
| #include "gpu/command_buffer/service/program_manager.h"
|
| +#include "gpu/command_buffer/service/valuebuffer_manager.h"
|
|
|
| namespace gpu {
|
| namespace gles2 {
|
|
|
| -Valuebuffer::Valuebuffer(ValuebufferManager* manager, GLuint client_id)
|
| +Valuebuffer::Valuebuffer(ValuebufferManager* manager, unsigned int client_id)
|
| : manager_(manager), client_id_(client_id), has_been_bound_(false) {
|
| manager_->StartTracking(this);
|
| + active_state_map_ = new ValueStateMap();
|
| }
|
|
|
| Valuebuffer::~Valuebuffer() {
|
| @@ -21,40 +22,40 @@ Valuebuffer::~Valuebuffer() {
|
| }
|
| }
|
|
|
| -void Valuebuffer::AddSubscription(GLenum subscription) {
|
| +void Valuebuffer::AddSubscription(unsigned int subscription) {
|
| subscriptions_.insert(subscription);
|
| }
|
|
|
| -void Valuebuffer::RemoveSubscription(GLenum subscription) {
|
| +void Valuebuffer::RemoveSubscription(unsigned int subscription) {
|
| subscriptions_.erase(subscription);
|
| }
|
|
|
| -bool Valuebuffer::IsSubscribed(GLenum subscription) {
|
| +bool Valuebuffer::IsSubscribed(unsigned int subscription) {
|
| return subscriptions_.find(subscription) != subscriptions_.end();
|
| }
|
|
|
| -const ValueState *Valuebuffer::GetState(GLenum target) const {
|
| - StateMap::const_iterator it = active_state_map_.find(target);
|
| - return it != active_state_map_.end() ? &it->second : NULL;
|
| +const ValueState* Valuebuffer::GetState(unsigned int target) const {
|
| + return active_state_map_->GetState(target);
|
| }
|
|
|
| -void Valuebuffer::UpdateState(const StateMap& pending_state) {
|
| +void Valuebuffer::UpdateState(const ValueStateMap* pending_state) {
|
| + DCHECK(pending_state);
|
| for (SubscriptionSet::const_iterator it = subscriptions_.begin();
|
| it != subscriptions_.end(); ++it) {
|
| - StateMap::const_iterator pending_state_it = pending_state.find((*it));
|
| - if (pending_state_it != pending_state.end()) {
|
| - active_state_map_[pending_state_it->first] = pending_state_it->second;
|
| + const ValueState *state = pending_state->GetState(*it);
|
| + if (state != NULL) {
|
| + active_state_map_->UpdateState(*it, *state);
|
| }
|
| }
|
| }
|
|
|
| -ValuebufferManager::ValuebufferManager()
|
| - : valuebuffer_count_(0) {
|
| +ValuebufferManager::ValuebufferManager(ValueStateMap* state_map)
|
| + : valuebuffer_count_(0),
|
| + pending_state_map_(state_map) {
|
| }
|
|
|
| ValuebufferManager::~ValuebufferManager() {
|
| DCHECK(valuebuffer_map_.empty());
|
| - DCHECK(pending_state_map_.empty());
|
| // If this triggers, that means something is keeping a reference to
|
| // a Valuebuffer belonging to this.
|
| CHECK_EQ(valuebuffer_count_, 0u);
|
| @@ -62,7 +63,6 @@ ValuebufferManager::~ValuebufferManager() {
|
|
|
| void ValuebufferManager::Destroy() {
|
| valuebuffer_map_.clear();
|
| - pending_state_map_.clear();
|
| }
|
|
|
| void ValuebufferManager::StartTracking(Valuebuffer* /* valuebuffer */) {
|
| @@ -73,19 +73,19 @@ void ValuebufferManager::StopTracking(Valuebuffer* /* valuebuffer */) {
|
| --valuebuffer_count_;
|
| }
|
|
|
| -void ValuebufferManager::CreateValuebuffer(GLuint client_id) {
|
| +void ValuebufferManager::CreateValuebuffer(unsigned int client_id) {
|
| scoped_refptr<Valuebuffer> valuebuffer(new Valuebuffer(this, client_id));
|
| std::pair<ValuebufferMap::iterator, bool> result =
|
| valuebuffer_map_.insert(std::make_pair(client_id, valuebuffer));
|
| DCHECK(result.second);
|
| }
|
|
|
| -Valuebuffer* ValuebufferManager::GetValuebuffer(GLuint client_id) {
|
| +Valuebuffer* ValuebufferManager::GetValuebuffer(unsigned int client_id) {
|
| ValuebufferMap::iterator it = valuebuffer_map_.find(client_id);
|
| return it != valuebuffer_map_.end() ? it->second.get() : NULL;
|
| }
|
|
|
| -void ValuebufferManager::RemoveValuebuffer(GLuint client_id) {
|
| +void ValuebufferManager::RemoveValuebuffer(unsigned int client_id) {
|
| ValuebufferMap::iterator it = valuebuffer_map_.find(client_id);
|
| if (it != valuebuffer_map_.end()) {
|
| Valuebuffer* valuebuffer = it->second.get();
|
| @@ -96,15 +96,10 @@ void ValuebufferManager::RemoveValuebuffer(GLuint client_id) {
|
|
|
| void ValuebufferManager::UpdateValuebufferState(Valuebuffer* valuebuffer) {
|
| DCHECK(valuebuffer);
|
| - valuebuffer->UpdateState(pending_state_map_);
|
| -}
|
| -
|
| -void ValuebufferManager::UpdateValueState(
|
| - GLenum target, const ValueState& state) {
|
| - pending_state_map_[target] = state;
|
| + valuebuffer->UpdateState(pending_state_map_.get());
|
| }
|
|
|
| -uint32 ValuebufferManager::ApiTypeForSubscriptionTarget(GLenum target) {
|
| +uint32 ValuebufferManager::ApiTypeForSubscriptionTarget(unsigned int target) {
|
| switch (target) {
|
| case GL_MOUSE_POSITION_CHROMIUM:
|
| return Program::kUniform2i;
|
|
|