| Index: gpu/command_buffer/service/memory_tracking.h
|
| diff --git a/gpu/command_buffer/service/memory_tracking.h b/gpu/command_buffer/service/memory_tracking.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..36653272ac5de315f41624186eef6bc5a4d8900c
|
| --- /dev/null
|
| +++ b/gpu/command_buffer/service/memory_tracking.h
|
| @@ -0,0 +1,77 @@
|
| +// 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.
|
| +
|
| +#ifndef GPU_COMMAND_BUFFER_SERVICE_MEMORY_TRACKING_H_
|
| +#define GPU_COMMAND_BUFFER_SERVICE_MEMORY_TRACKING_H_
|
| +
|
| +#include <string>
|
| +#include "base/basictypes.h"
|
| +#include "base/debug/trace_event.h"
|
| +
|
| +namespace gpu {
|
| +namespace gles2 {
|
| +
|
| +// A MemoryTracker is used to propagate per-ContextGroup memory usage
|
| +// statistics to the global GpuMemoryManager.
|
| +class MemoryTracker : public base::RefCounted<MemoryTracker> {
|
| + public:
|
| + virtual void TrackMemoryAllocatedChange(size_t old_size, size_t new_size) = 0;
|
| +
|
| + protected:
|
| + friend class base::RefCounted<MemoryTracker>;
|
| + MemoryTracker() {}
|
| + virtual ~MemoryTracker() {};
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(MemoryTracker);
|
| +};
|
| +
|
| +// A MemoryTypeTracker tracks the use of a particular type of memory (buffer,
|
| +// texture, or renderbuffer) and forward the result to a specified
|
| +// MemoryTracker.
|
| +class MemoryTypeTracker {
|
| + public:
|
| + MemoryTypeTracker(
|
| + MemoryTracker* memory_tracker,
|
| + const char* trace_category,
|
| + const char* trace_name)
|
| + : memory_tracker_(memory_tracker),
|
| + trace_category_(trace_category),
|
| + trace_name_(trace_name),
|
| + has_updated_mem_represented_(false),
|
| + last_updated_mem_represented_(0) {
|
| + }
|
| +
|
| + void UpdateMemRepresented(size_t mem_represented) {
|
| + if (!has_updated_mem_represented_ &&
|
| + mem_represented == last_updated_mem_represented_) {
|
| + return;
|
| + }
|
| + if (memory_tracker_) {
|
| + memory_tracker_->TrackMemoryAllocatedChange(
|
| + last_updated_mem_represented_,
|
| + mem_represented);
|
| + }
|
| + has_updated_mem_represented_ = true;
|
| + last_updated_mem_represented_ = mem_represented;
|
| + TRACE_COUNTER_ID1(trace_category_,
|
| + trace_name_,
|
| + memory_tracker_,
|
| + last_updated_mem_represented_);
|
| + }
|
| +
|
| + private:
|
| + MemoryTracker* memory_tracker_;
|
| + const char* trace_category_;
|
| + const char* trace_name_;
|
| + bool has_updated_mem_represented_;
|
| + size_t last_updated_mem_represented_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(MemoryTypeTracker);
|
| +};
|
| +
|
| +} // namespace gles2
|
| +} // namespace gpu
|
| +
|
| +#endif // GPU_COMMAND_BUFFER_SERVICE_MEMORY_TRACKING_H_
|
|
|