diff --git a/base/files/file_tracing.cc b/base/files/file_tracing.cc
new file mode 100644
index 0000000..a1919c4
--- /dev/null
+++ b/base/files/file_tracing.cc
@@ -0,0 +1,56 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/files/file_tracing.h"
+
+#include "base/files/file.h"
+
+namespace base {
+
+namespace {
+FileTracing::Provider* g_provider = nullptr;
+}
+
+// static
+void FileTracing::SetProvider(FileTracing::Provider* provider) {
+  g_provider = provider;
+}
+
+FileTracing::ScopedEnabler::ScopedEnabler() {
+  if (g_provider)
+    g_provider->FileTracingEnable(this);
+}
+
+FileTracing::ScopedEnabler::~ScopedEnabler() {
+  if (g_provider)
+    g_provider->FileTracingDisable(this);
+}
+
+FileTracing::ScopedTrace::ScopedTrace() : initialized_(false) {}
+
+FileTracing::ScopedTrace::~ScopedTrace() {
+  if (initialized_ && g_provider) {
+    g_provider->FileTracingEventEnd(
+        name_, &file_->trace_enabler_, file_->path_, size_);
+  }
+}
+
+bool FileTracing::ScopedTrace::ShouldInitialize() const {
+  return g_provider && g_provider->FileTracingCategoryIsEnabled();
+}
+
+void FileTracing::ScopedTrace::Initialize(
+    const char* name, File* file, int64 size) {
+  file_ = file;
+  name_ = name;
+  size_ = size;
+  initialized_ = true;
+
+  if (g_provider) {
+    g_provider->FileTracingEventBegin(
+        name_, &file_->trace_enabler_, file_->path_, size_);
+  }
+}
+
+}  // namespace base
diff --git a/base/files/file_tracing.h b/base/files/file_tracing.h
new file mode 100644
index 0000000..8452037
--- /dev/null
+++ b/base/files/file_tracing.h
@@ -0,0 +1,95 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef BASE_FILES_FILE_TRACING_H_
+#define BASE_FILES_FILE_TRACING_H_
+
+#include "base/base_export.h"
+#include "base/basictypes.h"
+#include "base/macros.h"
+
+#define FILE_TRACING_PREFIX "File"
+
+#define SCOPED_FILE_TRACE_WITH_SIZE(name, size) \
+    FileTracing::ScopedTrace scoped_file_trace; \
+    if (scoped_file_trace.ShouldInitialize()) \
+      scoped_file_trace.Initialize(FILE_TRACING_PREFIX "::" name, this, size)
+
+#define SCOPED_FILE_TRACE(name) SCOPED_FILE_TRACE_WITH_SIZE(name, 0)
+
+namespace base {
+
+class File;
+class FilePath;
+
+class BASE_EXPORT FileTracing {
+ public:
+  class Provider {
+   public:
+    // Whether the file tracing category is currently enabled.
+    virtual bool FileTracingCategoryIsEnabled() const = 0;
+
+    // Enables file tracing for |id|. Must be called before recording events.
+    virtual void FileTracingEnable(void* id) = 0;
+
+    // Disables file tracing for |id|.
+    virtual void FileTracingDisable(void* id) = 0;
+
+    // Begins an event for |id| with |name|. |path| tells where in the directory
+    // structure the event is happening (and may be blank). |size| is reported
+    // if not 0.
+    virtual void FileTracingEventBegin(
+        const char* name, void* id, const FilePath& path, int64 size) = 0;
+
+    // Ends an event for |id| with |name|. |path| tells where in the directory
+    // structure the event is happening (and may be blank). |size| is reported
+    // if not 0.
+    virtual void FileTracingEventEnd(
+        const char* name, void* id, const FilePath& path, int64 size) = 0;
+  };
+
+  // Sets a global file tracing provider to query categories and record events.
+  static void SetProvider(Provider* provider);
+
+  // Enables file tracing while in scope.
+  class ScopedEnabler {
+   public:
+    ScopedEnabler();
+    ~ScopedEnabler();
+  };
+
+  class ScopedTrace {
+   public:
+    ScopedTrace();
+    ~ScopedTrace();
+
+    // Whether this trace should be initialized or not.
+    bool ShouldInitialize() const;
+
+    // Called only if the tracing category is enabled.
+    void Initialize(const char* event, File* file, int64 size);
+
+   private:
+    // True if |Initialize()| has been called. Don't touch |path_|, |event_|,
+    // or |bytes_| if |initialized_| is false.
+    bool initialized_;
+
+    // The event name to trace (e.g. "Read", "Write"). Prefixed with "File".
+    const char* name_;
+
+    // The file being traced. Must outlive this class.
+    File* file_;
+
+    // The size (in bytes) of this trace. Not reported if 0.
+    int64 size_;
+
+    DISALLOW_COPY_AND_ASSIGN(ScopedTrace);
+  };
+
+  DISALLOW_COPY_AND_ASSIGN(FileTracing);
+};
+
+}  // namespace base
+
+#endif  // BASE_FILES_FILE_TRACING_H_
diff --git a/tools/clang/scripts/blink_gc_plugin_flags.py b/tools/clang/scripts/blink_gc_plugin_flags.py
new file mode 100755
index 0000000..5bb28da
--- /dev/null
+++ b/tools/clang/scripts/blink_gc_plugin_flags.py
@@ -0,0 +1,35 @@
+#!/usr/bin/env python
+# Copyright 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# This script returns the flags that should be passed to clang.
+
+import os
+import sys
+
+THIS_DIR = os.path.abspath(os.path.dirname(__file__))
+SRC_DIR = os.path.join(THIS_DIR, '..', '..', '..')
+CLANG_LIB_PATH = os.path.normpath(os.path.join(
+    SRC_DIR, 'third_party', 'llvm-build', 'Release+Asserts', 'lib'))
+
+FLAGS = '-Xclang -add-plugin -Xclang blink-gc-plugin'
+PREFIX= ' -Xclang -plugin-arg-blink-gc-plugin -Xclang '
+for arg in sys.argv[1:]:
+  if arg == 'enable-oilpan=1':
+    FLAGS += PREFIX + 'enable-oilpan'
+  elif arg == 'dump-graph=1':
+    FLAGS += PREFIX + 'dump-graph'
+  elif arg == 'warn-raw-ptr=1':
+    FLAGS += PREFIX + 'warn-raw-ptr'
+  elif arg == 'warn-unneeded-finalizer=1':
+    FLAGS += PREFIX + 'warn-unneeded-finalizer'
+  elif arg.startswith('custom_clang_lib_path='):
+    CLANG_LIB_PATH = arg[len('custom_clang_lib_path='):]
+
+if not sys.platform in ['win32', 'cygwin']:
+  LIBSUFFIX = 'dylib' if sys.platform == 'darwin' else 'so'
+  FLAGS = ('-Xclang -load -Xclang "%s/libBlinkGCPlugin.%s" ' + FLAGS) % \
+           (CLANG_LIB_PATH, LIBSUFFIX)
+
+print FLAGS
