summaryrefslogtreecommitdiffstats
path: root/base/memory/shared_memory_posix.cc
diff options
context:
space:
mode:
authorerikchen <erikchen@chromium.org>2015-03-12 11:00:23 -0700
committerCommit bot <commit-bot@chromium.org>2015-03-12 18:00:53 +0000
commite9e112781c3bd63bc888bed77ed8ee760adb8022 (patch)
treecf9b0acf78edb6f2608b8d38208141dc47aef18e /base/memory/shared_memory_posix.cc
parent5a685845ab0da9c089bce7caaafdc4339beb6d7c (diff)
downloadchromium_src-e9e112781c3bd63bc888bed77ed8ee760adb8022.zip
chromium_src-e9e112781c3bd63bc888bed77ed8ee760adb8022.tar.gz
chromium_src-e9e112781c3bd63bc888bed77ed8ee760adb8022.tar.bz2
Add profiling to shared memory creation on posix systems.
The UMA profiling tool shows that creating shared memory is very janky on Macs. BUG=466437 Review URL: https://codereview.chromium.org/997353002 Cr-Commit-Position: refs/heads/master@{#320318}
Diffstat (limited to 'base/memory/shared_memory_posix.cc')
-rw-r--r--base/memory/shared_memory_posix.cc25
1 files changed, 24 insertions, 1 deletions
diff --git a/base/memory/shared_memory_posix.cc b/base/memory/shared_memory_posix.cc
index f8efa42..d6c290f 100644
--- a/base/memory/shared_memory_posix.cc
+++ b/base/memory/shared_memory_posix.cc
@@ -16,6 +16,7 @@
#include "base/lazy_instance.h"
#include "base/logging.h"
#include "base/process/process_metrics.h"
+#include "base/profiler/scoped_tracker.h"
#include "base/safe_strerror_posix.h"
#include "base/strings/utf_string_conversions.h"
#include "base/synchronization/lock.h"
@@ -118,6 +119,11 @@ bool SharedMemory::CreateAndMapAnonymous(size_t size) {
// In case we want to delete it later, it may be useful to save the value
// of mem_filename after FilePathForMemoryName().
bool SharedMemory::Create(const SharedMemoryCreateOptions& options) {
+ // TODO(erikchen): Remove ScopedTracker below once http://crbug.com/466437
+ // is fixed.
+ tracked_objects::ScopedTracker tracking_profile1(
+ FROM_HERE_WITH_EXPLICIT_FUNCTION(
+ "466437 SharedMemory::Create::Start"));
DCHECK_EQ(-1, mapped_file_);
if (options.size == 0) return false;
@@ -140,11 +146,22 @@ bool SharedMemory::Create(const SharedMemoryCreateOptions& options) {
// Q: Why not use the shm_open() etc. APIs?
// A: Because they're limited to 4mb on OS X. FFFFFFFUUUUUUUUUUU
FilePath directory;
- if (GetShmemTempDir(options.executable, &directory))
+ if (GetShmemTempDir(options.executable, &directory)) {
+ // TODO(erikchen): Remove ScopedTracker below once http://crbug.com/466437
+ // is fixed.
+ tracked_objects::ScopedTracker tracking_profile2(
+ FROM_HERE_WITH_EXPLICIT_FUNCTION(
+ "466437 SharedMemory::Create::OpenTemporaryFile"));
fp.reset(CreateAndOpenTemporaryFileInDir(directory, &path));
+ }
if (fp) {
if (options.share_read_only) {
+ // TODO(erikchen): Remove ScopedTracker below once
+ // http://crbug.com/466437 is fixed.
+ tracked_objects::ScopedTracker tracking_profile3(
+ FROM_HERE_WITH_EXPLICIT_FUNCTION(
+ "466437 SharedMemory::Create::OpenReadonly"));
// Also open as readonly so that we can ShareReadOnlyToProcess.
readonly_fd.reset(HANDLE_EINTR(open(path.value().c_str(), O_RDONLY)));
if (!readonly_fd.is_valid()) {
@@ -153,6 +170,12 @@ bool SharedMemory::Create(const SharedMemoryCreateOptions& options) {
return false;
}
}
+
+ // TODO(erikchen): Remove ScopedTracker below once http://crbug.com/466437
+ // is fixed.
+ tracked_objects::ScopedTracker tracking_profile4(
+ FROM_HERE_WITH_EXPLICIT_FUNCTION(
+ "466437 SharedMemory::Create::Unlink"));
// Deleting the file prevents anyone else from mapping it in (making it
// private), and prevents the need for cleanup (once the last fd is
// closed, it is truly freed).