diff options
author | ericrk <ericrk@chromium.org> | 2015-08-10 12:32:41 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-08-10 19:33:09 +0000 |
commit | 1ba438de5539fbe7e30d71040d35067550fad9cd (patch) | |
tree | 9d46d7dbdb712f73143f11a6c7d9ebcccc70c02a /cc | |
parent | d95030f5cc91fd2ed5f235df51c29d8da73909ef (diff) | |
download | chromium_src-1ba438de5539fbe7e30d71040d35067550fad9cd.zip chromium_src-1ba438de5539fbe7e30d71040d35067550fad9cd.tar.gz chromium_src-1ba438de5539fbe7e30d71040d35067550fad9cd.tar.bz2 |
Currently, ResourceProvider memory dumps use IDs which may
collide with other ResourceProviders in the same process. This
patch appends the ResourceProvider pointer, ensuring they don't collide.
BUG=
CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel
Review URL: https://codereview.chromium.org/1284443003
Cr-Commit-Position: refs/heads/master@{#342674}
Diffstat (limited to 'cc')
-rw-r--r-- | cc/resources/resource_pool.cc | 14 | ||||
-rw-r--r-- | cc/resources/resource_pool.h | 1 | ||||
-rw-r--r-- | cc/resources/resource_provider.cc | 16 | ||||
-rw-r--r-- | cc/resources/resource_provider.h | 6 |
4 files changed, 28 insertions, 9 deletions
diff --git a/cc/resources/resource_pool.cc b/cc/resources/resource_pool.cc index 23a6233..cdcaa4d 100644 --- a/cc/resources/resource_pool.cc +++ b/cc/resources/resource_pool.cc @@ -18,12 +18,16 @@ namespace cc { void ResourcePool::PoolResource::OnMemoryDump( base::trace_event::ProcessMemoryDump* pmd, + const ResourceProvider* resource_provider, bool is_free) const { - // TODO(ericrk): Add per-compositor ID in name. + // Resource IDs are not process-unique, so log with the ResourceProvider's + // unique id. std::string parent_node = - base::StringPrintf("cc/resource_memory/resource_%d", resource->id()); + base::StringPrintf("cc/resource_memory/resource_provider_%d/resource_%d", + resource_provider->tracing_id(), resource->id()); std::string dump_name = - base::StringPrintf("cc/tile_memory/resource_%d", resource->id()); + base::StringPrintf("cc/tile_memory/resource_provider_%d/resource_%d", + resource_provider->tracing_id(), resource->id()); base::trace_event::MemoryAllocatorDump* dump = pmd->CreateAllocatorDump(dump_name); @@ -219,10 +223,10 @@ void ResourcePool::DidFinishUsingResource(ScopedResource* resource, bool ResourcePool::OnMemoryDump(const base::trace_event::MemoryDumpArgs& args, base::trace_event::ProcessMemoryDump* pmd) { for (const auto& resource : unused_resources_) { - resource.OnMemoryDump(pmd, true /* is_free */); + resource.OnMemoryDump(pmd, resource_provider_, true /* is_free */); } for (const auto& resource : busy_resources_) { - resource.OnMemoryDump(pmd, false /* is_free */); + resource.OnMemoryDump(pmd, resource_provider_, false /* is_free */); } // TODO(ericrk): Dump vended out resources once that data is available. // crbug.com/516541 diff --git a/cc/resources/resource_pool.h b/cc/resources/resource_pool.h index f336e3b..e577826 100644 --- a/cc/resources/resource_pool.h +++ b/cc/resources/resource_pool.h @@ -83,6 +83,7 @@ class CC_EXPORT ResourcePool : public base::trace_event::MemoryDumpProvider { PoolResource(ScopedResource* resource, uint64_t content_id) : resource(resource), content_id(content_id) {} void OnMemoryDump(base::trace_event::ProcessMemoryDump* pmd, + const ResourceProvider* resource_provider, bool is_free) const; ScopedResource* resource; diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc index 888f728..be282b9 100644 --- a/cc/resources/resource_provider.cc +++ b/cc/resources/resource_provider.cc @@ -7,6 +7,7 @@ #include <algorithm> #include <limits> +#include "base/atomic_sequence_num.h" #include "base/containers/hash_tables.h" #include "base/metrics/histogram.h" #include "base/numerics/safe_math.h" @@ -246,6 +247,10 @@ class CopyTextureFence : public ResourceProvider::Fence { DISALLOW_COPY_AND_ASSIGN(CopyTextureFence); }; +// Generates process-unique IDs to use for tracing a ResourceProvider's +// resources. +base::StaticAtomicSequenceNumber g_next_resource_provider_tracing_id; + } // namespace ResourceProvider::Resource::~Resource() {} @@ -1116,7 +1121,8 @@ ResourceProvider::ResourceProvider( use_sync_query_(false), use_persistent_map_for_gpu_memory_buffers_( use_persistent_map_for_gpu_memory_buffers), - use_image_texture_targets_(use_image_texture_targets) { + use_image_texture_targets_(use_image_texture_targets), + tracing_id_(g_next_resource_provider_tracing_id.GetNext()) { DCHECK(output_surface_->HasClient()); DCHECK(id_allocation_chunk_size_); } @@ -1990,9 +1996,11 @@ bool ResourceProvider::OnMemoryDump( for (const auto& resource_entry : resources_) { const auto& resource = resource_entry.second; - // TODO(ericrk): Add per-compositor ID in name. - std::string dump_name = base::StringPrintf("cc/resource_memory/resource_%d", - resource_entry.first); + // Resource IDs are not process-unique, so log with the ResourceProvider's + // unique id. + std::string dump_name = base::StringPrintf( + "cc/resource_memory/resource_provider_%d/resource_%d", tracing_id_, + resource_entry.first); base::trace_event::MemoryAllocatorDump* dump = pmd->CreateAllocatorDump(dump_name); diff --git a/cc/resources/resource_provider.h b/cc/resources/resource_provider.h index 375ed54..324df1b 100644 --- a/cc/resources/resource_provider.h +++ b/cc/resources/resource_provider.h @@ -448,6 +448,8 @@ class CC_EXPORT ResourceProvider bool OnMemoryDump(const base::trace_event::MemoryDumpArgs& args, base::trace_event::ProcessMemoryDump* pmd) override; + int tracing_id() const { return tracing_id_; } + protected: ResourceProvider(OutputSurface* output_surface, SharedBitmapManager* shared_bitmap_manager, @@ -617,6 +619,10 @@ class CC_EXPORT ResourceProvider scoped_refptr<SynchronousFence> synchronous_fence_; std::vector<unsigned> use_image_texture_targets_; + // A process-unique ID used for disambiguating memory dumps from different + // resource providers. + int tracing_id_; + DISALLOW_COPY_AND_ASSIGN(ResourceProvider); }; |