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

Unified Diff: core/cross/buffer.cc

Issue 155276: Add ClientInfo... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/o3d/
Patch Set: '' Created 11 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: core/cross/buffer.cc
===================================================================
--- core/cross/buffer.cc (revision 20119)
+++ core/cross/buffer.cc (working copy)
@@ -34,6 +34,7 @@
#include "core/cross/precompile.h"
#include "core/cross/buffer.h"
+#include "core/cross/client_info.h"
#include "core/cross/renderer.h"
#include "core/cross/features.h"
#include "core/cross/error.h"
@@ -108,6 +109,7 @@
}
Buffer::~Buffer() {
+ AdjustBufferMemoryInfo(false);
for (unsigned ii = 0; ii < fields_.size(); ++ii) {
if (!fields_[ii].IsNull()) {
fields_[ii]->ClearBuffer();
@@ -115,6 +117,17 @@
}
}
+void Buffer::AdjustBufferMemoryInfo(bool add) {
+ // Only count VRAM/hardware buffers.
+ if (IsA(VertexBuffer::GetApparentClass()) ||
+ IsA(IndexBuffer::GetApparentClass())) {
+ size_t size_in_bytes = num_elements_ * stride_;
+ ServiceDependency<ClientInfoManager> client_info_manager(service_locator());
apatrick 2009/07/09 18:22:00 You don't need to use a ServiceDependency here. Ge
+ client_info_manager->AdjustBufferMemoryUsed(
+ static_cast<int>(size_in_bytes) * (add ? 1 : -1));
+ }
+}
+
bool Buffer::AllocateElements(unsigned num_elements) {
if (access_mode_ != NONE) {
O3D_ERROR(service_locator()) << "Attempt to allocate locked Buffer '"
@@ -152,25 +165,33 @@
return false;
}
+ bool success = true;
if (!ConcreteAllocate(size_in_bytes)) {
- num_elements_ = 0;
- return false;
+ num_elements = 0;
+ size_in_bytes = 0;
+ success = false;
}
num_elements_ = num_elements;
- return true;
+
+ AdjustBufferMemoryInfo(true);
+
+ return success;
}
void Buffer::Free() {
if (num_elements_ > 0) {
ConcreteFree();
+ AdjustBufferMemoryInfo(false);
num_elements_ = 0;
}
}
bool Buffer::ReshuffleBuffer(unsigned int new_stride, Field* field_to_remove) {
if (new_stride == 0) {
+ AdjustBufferMemoryInfo(false);
ConcreteFree();
+ stride_ = 0;
return true;
}
if (num_elements_) {
@@ -202,6 +223,7 @@
// Copy the reorganized data into a new buffer.
{
ConcreteFree();
+ AdjustBufferMemoryInfo(false);
if (!ConcreteAllocate(size_in_bytes)) {
num_elements_ = 0;
O3D_ERROR(service_locator())
@@ -214,6 +236,7 @@
// is completed (see CreateField, RemoveField) for when we create a new
// buffer with no fields yet.
stride_ = new_stride;
+ AdjustBufferMemoryInfo(true);
BufferLockHelper helper(this);
void* destination = helper.GetData(Buffer::WRITE_ONLY);
if (!destination) {
« no previous file with comments | « core/cross/buffer.h ('k') | core/cross/client.cc » ('j') | core/cross/client_info_test.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698