summaryrefslogtreecommitdiffstats
path: root/cc
diff options
context:
space:
mode:
authorericrk <ericrk@chromium.org>2015-08-10 12:32:41 -0700
committerCommit bot <commit-bot@chromium.org>2015-08-10 19:33:09 +0000
commit1ba438de5539fbe7e30d71040d35067550fad9cd (patch)
tree9d46d7dbdb712f73143f11a6c7d9ebcccc70c02a /cc
parentd95030f5cc91fd2ed5f235df51c29d8da73909ef (diff)
downloadchromium_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.cc14
-rw-r--r--cc/resources/resource_pool.h1
-rw-r--r--cc/resources/resource_provider.cc16
-rw-r--r--cc/resources/resource_provider.h6
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);
};