Index: cc/resources/resource_provider.cc |
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc |
index 8d5a3fce7fe37616bef719b2332ca41d18e7b74d..22d76c5ab006810ee6407b255f78275e21dc47b8 100644 |
--- a/cc/resources/resource_provider.cc |
+++ b/cc/resources/resource_provider.cc |
@@ -13,6 +13,7 @@ |
#include "base/atomic_sequence_num.h" |
#include "base/macros.h" |
+#include "base/memory/shared_memory_tracker.h" |
#include "base/metrics/histogram.h" |
#include "base/numerics/safe_math.h" |
#include "base/stl_util.h" |
@@ -40,7 +41,6 @@ |
#include "third_party/skia/include/gpu/gl/GrGLTypes.h" |
#include "ui/gfx/geometry/rect.h" |
#include "ui/gfx/geometry/vector2d.h" |
-#include "ui/gfx/gpu_memory_buffer_tracing.h" |
#include "ui/gfx/icc_profile.h" |
#include "ui/gl/trace_util.h" |
@@ -2169,32 +2169,54 @@ bool ResourceProvider::OnMemoryDump( |
base::trace_event::MemoryAllocatorDump::kUnitsBytes, |
static_cast<uint64_t>(total_bytes)); |
- // Resources may be shared across processes and require a shared GUID to |
- // prevent double counting the memory. |
- base::trace_event::MemoryAllocatorDumpGuid guid; |
- switch (resource.type) { |
- case RESOURCE_TYPE_GPU_MEMORY_BUFFER: |
- guid = |
- resource.gpu_memory_buffer->GetGUIDForTracing(tracing_process_id); |
- break; |
- case RESOURCE_TYPE_GL_TEXTURE: |
- DCHECK(resource.gl_id); |
- guid = gl::GetGLTextureClientGUIDForTracing( |
- compositor_context_provider_->ContextSupport() |
- ->ShareGroupTracingGUID(), |
- resource.gl_id); |
- break; |
- case RESOURCE_TYPE_BITMAP: |
- DCHECK(resource.has_shared_bitmap_id); |
- guid = GetSharedBitmapGUIDForTracing(resource.shared_bitmap_id); |
- break; |
- } |
- |
- DCHECK(!guid.empty()); |
+ if (resource.type == RESOURCE_TYPE_GL_TEXTURE || |
+ (resource.type == RESOURCE_TYPE_GPU_MEMORY_BUFFER && |
+ !resource.gpu_memory_buffer->GetSharedMemory())) { |
+ // Resources may be shared across processes and require a shared GUID to |
+ // prevent double counting the memory. |
+ base::trace_event::MemoryAllocatorDumpGuid guid; |
+ switch (resource.type) { |
+ case RESOURCE_TYPE_GPU_MEMORY_BUFFER: |
+ guid = |
+ resource.gpu_memory_buffer->GetGUIDForTracing(tracing_process_id); |
+ break; |
+ case RESOURCE_TYPE_GL_TEXTURE: |
+ DCHECK(resource.gl_id); |
+ guid = gl::GetGLTextureClientGUIDForTracing( |
+ compositor_context_provider_->ContextSupport() |
+ ->ShareGroupTracingGUID(), |
+ resource.gl_id); |
+ break; |
+ case RESOURCE_TYPE_BITMAP: |
+ NOTREACHED(); |
+ break; |
+ } |
+ DCHECK(!guid.empty()); |
- const int kImportance = 2; |
- pmd->CreateSharedGlobalAllocatorDump(guid); |
- pmd->AddOwnershipEdge(dump->guid(), guid, kImportance); |
+ const int kImportance = 2; |
+ pmd->CreateSharedGlobalAllocatorDump(guid); |
+ pmd->AddOwnershipEdge(dump->guid(), guid, kImportance); |
+ } else { |
+ base::SharedMemory* shared_memory = nullptr; |
+ switch (resource.type) { |
+ case RESOURCE_TYPE_GPU_MEMORY_BUFFER: |
+ shared_memory = resource.gpu_memory_buffer->GetSharedMemory(); |
+ DCHECK(shared_memory); |
+ break; |
+ case RESOURCE_TYPE_GL_TEXTURE: |
+ NOTREACHED(); |
+ break; |
+ case RESOURCE_TYPE_BITMAP: |
+ if (!resource.shared_bitmap) |
+ break; |
+ shared_memory = resource.shared_bitmap->GetSharedMemory(); |
+ break; |
+ } |
+ if (shared_memory) { |
+ base::SharedMemoryTracker::AddOwnershipEdges(pmd, dump->guid(), |
+ *shared_memory); |
+ } |
+ } |
} |
return true; |