diff options
author | gman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-04 20:06:47 +0000 |
---|---|---|
committer | gman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-04 20:06:47 +0000 |
commit | e39f7293aa98e5d8c294988bfa341002867e9500 (patch) | |
tree | 803745bc8a9a4158ba4e99727638624253593024 /gpu | |
parent | 53db6a8f403cb49154df66f94524fd1a577cae42 (diff) | |
download | chromium_src-e39f7293aa98e5d8c294988bfa341002867e9500.zip chromium_src-e39f7293aa98e5d8c294988bfa341002867e9500.tar.gz chromium_src-e39f7293aa98e5d8c294988bfa341002867e9500.tar.bz2 |
Track shared memory used by GPU process
TEST=DCHECK
BUG=79762
R=apatrick@chromium.org
Review URL: http://codereview.chromium.org/9027016
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@116366 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu')
4 files changed, 25 insertions, 29 deletions
diff --git a/gpu/command_buffer/service/command_buffer_service.cc b/gpu/command_buffer/service/command_buffer_service.cc index f196259..c5a1162 100644 --- a/gpu/command_buffer/service/command_buffer_service.cc +++ b/gpu/command_buffer/service/command_buffer_service.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -7,6 +7,7 @@ #include <limits> #include "base/process_util.h" +#include "base/debug/trace_event.h" #include "gpu/command_buffer/common/cmd_buffer_common.h" using ::base::SharedMemory; @@ -21,16 +22,20 @@ CommandBufferService::CommandBufferService() token_(0), generation_(0), error_(error::kNoError), - context_lost_reason_(error::kUnknown) { + context_lost_reason_(error::kUnknown), + shared_memory_bytes_allocated_(0) { // Element zero is always NULL. registered_objects_.push_back(Buffer()); } CommandBufferService::~CommandBufferService() { for (size_t i = 0; i < registered_objects_.size(); ++i) { - if (registered_objects_[i].shared_memory) + if (registered_objects_[i].shared_memory) { + shared_memory_bytes_allocated_ -= registered_objects_[i].size; delete registered_objects_[i].shared_memory; + } } + // TODO(gman): Should we report 0 bytes to TRACE here? } bool CommandBufferService::Initialize() { @@ -106,6 +111,10 @@ int32 CommandBufferService::CreateTransferBuffer(size_t size, if (!buffer.CreateAnonymous(size)) return -1; + shared_memory_bytes_allocated_ += size; + TRACE_COUNTER_ID1( + "CommandBuffer", "SharedMemory", this, shared_memory_bytes_allocated_); + return RegisterTransferBuffer(&buffer, size, id_request); } @@ -180,6 +189,10 @@ void CommandBufferService::DestroyTransferBuffer(int32 handle) { if (static_cast<size_t>(handle) >= registered_objects_.size()) return; + shared_memory_bytes_allocated_ -= registered_objects_[handle].size; + TRACE_COUNTER_ID1( + "CommandBuffer", "SharedMemory", this, shared_memory_bytes_allocated_); + delete registered_objects_[handle].shared_memory; registered_objects_[handle] = Buffer(); unused_registered_object_elements_.insert(handle); diff --git a/gpu/command_buffer/service/command_buffer_service.h b/gpu/command_buffer/service/command_buffer_service.h index d7ea6fc..1429c7e 100644 --- a/gpu/command_buffer/service/command_buffer_service.h +++ b/gpu/command_buffer/service/command_buffer_service.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -72,6 +72,7 @@ class CommandBufferService : public CommandBuffer { uint32 generation_; error::Error error_; error::ContextLostReason context_lost_reason_; + size_t shared_memory_bytes_allocated_; }; } // namespace gpu diff --git a/gpu/command_buffer/service/renderbuffer_manager.cc b/gpu/command_buffer/service/renderbuffer_manager.cc index 38b3c76..225ac26 100644 --- a/gpu/command_buffer/service/renderbuffer_manager.cc +++ b/gpu/command_buffer/service/renderbuffer_manager.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -11,25 +11,6 @@ namespace gpu { namespace gles2 { -static uint32 BytesPerPixel(GLenum format) { - switch (format) { - case GL_STENCIL_INDEX8: - return 1; - case GL_RGBA4: - case GL_RGB565: - case GL_RGB5_A1: - case GL_DEPTH_COMPONENT16: - return 2; - case GL_DEPTH24_STENCIL8: - case GL_RGB8_OES: - case GL_RGBA8_OES: - case GL_DEPTH_COMPONENT24: - return 4; - default: - return 0; - } -} - RenderbufferManager::RenderbufferManager( GLint max_renderbuffer_size, GLint max_samples) : max_renderbuffer_size_(max_renderbuffer_size), @@ -43,8 +24,9 @@ RenderbufferManager::~RenderbufferManager() { DCHECK(renderbuffer_infos_.empty()); } -uint32 RenderbufferManager::RenderbufferInfo::EstimatedSize() { - return width_ * height_ * samples_ * BytesPerPixel(internal_format_); +size_t RenderbufferManager::RenderbufferInfo::EstimatedSize() { + return width_ * height_ * samples_ * + GLES2Util::RenderbufferBytesPerPixel(internal_format_); } void RenderbufferManager::UpdateMemRepresented() { diff --git a/gpu/command_buffer/service/renderbuffer_manager.h b/gpu/command_buffer/service/renderbuffer_manager.h index a61d435..cae19f3 100644 --- a/gpu/command_buffer/service/renderbuffer_manager.h +++ b/gpu/command_buffer/service/renderbuffer_manager.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -69,7 +69,7 @@ class RenderbufferManager { return has_been_bound_ && !IsDeleted(); } - uint32 EstimatedSize(); + size_t EstimatedSize(); private: friend class RenderbufferManager; @@ -158,7 +158,7 @@ class RenderbufferManager { int num_uncleared_renderbuffers_; - uint32 mem_represented_; + size_t mem_represented_; // Info for each renderbuffer in the system. typedef base::hash_map<GLuint, RenderbufferInfo::Ref> RenderbufferInfoMap; |