| Index: base/files/file_tracing.h
|
| diff --git a/base/files/file_tracing.h b/base/files/file_tracing.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..8452037790c2b21762c1d87cf419ef8a08f47313
|
| --- /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_
|
|
|