| Index: gpu/command_buffer/service/texture_manager.cc
|
| diff --git a/gpu/command_buffer/service/texture_manager.cc b/gpu/command_buffer/service/texture_manager.cc
|
| index 5085efa040910015afd13133ab9165cf69241e7b..c7ec8f3c33f14e31b9322e7548ce2c20def8e142 100644
|
| --- a/gpu/command_buffer/service/texture_manager.cc
|
| +++ b/gpu/command_buffer/service/texture_manager.cc
|
| @@ -1295,6 +1295,38 @@ void Texture::OnDidModifyPixels() {
|
| image->DidModifyTexImage();
|
| }
|
|
|
| +void Texture::DumpLevelMemory(base::trace_event::ProcessMemoryDump* pmd,
|
| + uint64_t client_tracing_id,
|
| + const std::string& dump_name) const {
|
| + for (uint32_t face_index = 0; face_index < face_infos_.size(); ++face_index) {
|
| + const auto& level_infos = face_infos_[face_index].level_infos;
|
| + for (uint32_t level_index = 0; level_index < level_infos.size();
|
| + ++level_index) {
|
| + // Skip levels with no size. Textures will have empty levels for all
|
| + // potential mip levels which are not in use.
|
| + if (!level_infos[level_index].estimated_size)
|
| + continue;
|
| +
|
| + if (level_infos[level_index].image) {
|
| + // If a level is backed by a GLImage, ask the GLImage to dump itself.
|
| + level_infos[level_index].image->OnMemoryDump(
|
| + pmd, client_tracing_id,
|
| + base::StringPrintf("%s/face_%d/level_%d", dump_name.c_str(),
|
| + face_index, level_index));
|
| + } else {
|
| + // If a level is not backed by a GLImage, create a simple dump.
|
| + base::trace_event::MemoryAllocatorDump* dump = pmd->CreateAllocatorDump(
|
| + base::StringPrintf("%s/face_%d/level_%d", dump_name.c_str(),
|
| + face_index, level_index));
|
| + dump->AddScalar(
|
| + base::trace_event::MemoryAllocatorDump::kNameSize,
|
| + base::trace_event::MemoryAllocatorDump::kUnitsBytes,
|
| + static_cast<uint64_t>(level_infos[level_index].estimated_size));
|
| + }
|
| + }
|
| + }
|
| +}
|
| +
|
| TextureRef::TextureRef(TextureManager* manager,
|
| GLuint client_id,
|
| Texture* texture)
|
| @@ -2062,10 +2094,6 @@ bool TextureManager::OnMemoryDump(const base::trace_event::MemoryDumpArgs& args,
|
|
|
| void TextureManager::DumpTextureRef(base::trace_event::ProcessMemoryDump* pmd,
|
| TextureRef* ref) {
|
| - // TODO(ericrk): Trace image-backed textures. crbug.com/514914
|
| - if (ref->texture()->HasImages())
|
| - return;
|
| -
|
| uint32_t size = ref->texture()->estimated_size();
|
|
|
| // Ignore unallocated texture IDs.
|
| @@ -2075,6 +2103,7 @@ void TextureManager::DumpTextureRef(base::trace_event::ProcessMemoryDump* pmd,
|
| std::string dump_name =
|
| base::StringPrintf("gl/textures/client_%d/texture_%d",
|
| memory_tracker_->ClientId(), ref->client_id());
|
| +
|
| base::trace_event::MemoryAllocatorDump* dump =
|
| pmd->CreateAllocatorDump(dump_name);
|
| dump->AddScalar(base::trace_event::MemoryAllocatorDump::kNameSize,
|
| @@ -2103,6 +2132,11 @@ void TextureManager::DumpTextureRef(base::trace_event::ProcessMemoryDump* pmd,
|
| importance = 2;
|
|
|
| pmd->AddOwnershipEdge(client_guid, service_guid, importance);
|
| +
|
| + // Dump all sub-levels held by the texture. They will appear below the main
|
| + // gl/textures/client_X/texture_Y dump.
|
| + ref->texture()->DumpLevelMemory(pmd, memory_tracker_->ClientTracingId(),
|
| + dump_name);
|
| }
|
|
|
| } // namespace gles2
|
|
|