summaryrefslogtreecommitdiffstats
path: root/gpu
diff options
context:
space:
mode:
authorgman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-04 20:06:47 +0000
committergman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-04 20:06:47 +0000
commite39f7293aa98e5d8c294988bfa341002867e9500 (patch)
tree803745bc8a9a4158ba4e99727638624253593024 /gpu
parent53db6a8f403cb49154df66f94524fd1a577cae42 (diff)
downloadchromium_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')
-rw-r--r--gpu/command_buffer/service/command_buffer_service.cc19
-rw-r--r--gpu/command_buffer/service/command_buffer_service.h3
-rw-r--r--gpu/command_buffer/service/renderbuffer_manager.cc26
-rw-r--r--gpu/command_buffer/service/renderbuffer_manager.h6
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;