Index: base/files/file_win.cc |
diff --git a/base/files/file_win.cc b/base/files/file_win.cc |
index 200ea296644a06238e21642313e831a1845a6596..daad35395c0ef508c089757864967866547d1066 100644 |
--- a/base/files/file_win.cc |
+++ b/base/files/file_win.cc |
@@ -6,10 +6,10 @@ |
#include <io.h> |
-#include "base/files/file_path.h" |
#include "base/logging.h" |
#include "base/metrics/sparse_histogram.h" |
#include "base/threading/thread_restrictions.h" |
+#include "base/trace_event/scoped_file_trace.h" |
namespace base { |
@@ -31,16 +31,20 @@ PlatformFile File::TakePlatformFile() { |
} |
void File::Close() { |
- if (file_.IsValid()) { |
- ThreadRestrictions::AssertIOAllowed(); |
- file_.Close(); |
- } |
+ if (!file_.IsValid()) |
+ return; |
+ |
+ ThreadRestrictions::AssertIOAllowed(); |
+ TRACE_EVENT1(kTraceGroup, "Close", "path", path_.AsUTF8Unsafe()); |
+ file_.Close(); |
} |
int64 File::Seek(Whence whence, int64 offset) { |
ThreadRestrictions::AssertIOAllowed(); |
DCHECK(IsValid()); |
+ TRACE_EVENT1(kTraceGroup, "Seek", "path", path_.AsUTF8Unsafe()); |
+ |
LARGE_INTEGER distance, res; |
distance.QuadPart = offset; |
DWORD move_method = static_cast<DWORD>(whence); |
@@ -56,6 +60,8 @@ int File::Read(int64 offset, char* data, int size) { |
if (size < 0) |
return -1; |
+ TRACE_EVENT2(kTraceGroup, "Read", "path", path_.AsUTF8Unsafe(), "size", size); |
+ |
LARGE_INTEGER offset_li; |
offset_li.QuadPart = offset; |
@@ -79,6 +85,9 @@ int File::ReadAtCurrentPos(char* data, int size) { |
if (size < 0) |
return -1; |
+ TRACE_EVENT2(kTraceGroup, "ReadAtCurrentPos", "path", path_.AsUTF8Unsafe(), |
+ "size", size); |
+ |
DWORD bytes_read; |
if (::ReadFile(file_.Get(), data, size, &bytes_read, NULL)) |
return bytes_read; |
@@ -101,6 +110,9 @@ int File::Write(int64 offset, const char* data, int size) { |
DCHECK(IsValid()); |
DCHECK(!async_); |
+ TRACE_EVENT2(kTraceGroup, "Write", "path", path_.AsUTF8Unsafe(), |
+ "size", size); |
+ |
LARGE_INTEGER offset_li; |
offset_li.QuadPart = offset; |
@@ -122,6 +134,9 @@ int File::WriteAtCurrentPos(const char* data, int size) { |
if (size < 0) |
return -1; |
+ TRACE_EVENT2(kTraceGroup, "WriteAtCurrentPos", "path", path_.AsUTF8Unsafe(), |
+ "size", size); |
+ |
DWORD bytes_written; |
if (::WriteFile(file_.Get(), data, size, &bytes_written, NULL)) |
return bytes_written; |
@@ -136,6 +151,9 @@ int File::WriteAtCurrentPosNoBestEffort(const char* data, int size) { |
int64 File::GetLength() { |
ThreadRestrictions::AssertIOAllowed(); |
DCHECK(IsValid()); |
+ |
+ TRACE_EVENT1(kTraceGroup, "GetLength", "path", path_.AsUTF8Unsafe()); |
+ |
LARGE_INTEGER size; |
if (!::GetFileSizeEx(file_.Get(), &size)) |
return -1; |
@@ -147,6 +165,9 @@ bool File::SetLength(int64 length) { |
ThreadRestrictions::AssertIOAllowed(); |
DCHECK(IsValid()); |
+ TRACE_EVENT2(kTraceGroup, "SetLength", "path", path_.AsUTF8Unsafe(), |
+ "length", length); |
+ |
// Get the current file pointer. |
LARGE_INTEGER file_pointer; |
LARGE_INTEGER zero; |
@@ -176,6 +197,8 @@ bool File::SetTimes(Time last_access_time, Time last_modified_time) { |
ThreadRestrictions::AssertIOAllowed(); |
DCHECK(IsValid()); |
+ TRACE_EVENT1(kTraceGroup, "SetTimes", "path", path_.AsUTF8Unsafe()); |
+ |
FILETIME last_access_filetime = last_access_time.ToFileTime(); |
FILETIME last_modified_filetime = last_modified_time.ToFileTime(); |
return (::SetFileTime(file_.Get(), NULL, &last_access_filetime, |
@@ -186,6 +209,8 @@ bool File::GetInfo(Info* info) { |
ThreadRestrictions::AssertIOAllowed(); |
DCHECK(IsValid()); |
+ TRACE_EVENT1(kTraceGroup, "GetInfo", "path", path_.AsUTF8Unsafe()); |
+ |
BY_HANDLE_FILE_INFORMATION file_info; |
if (!GetFileInformationByHandle(file_.Get(), &file_info)) |
return false; |
@@ -205,6 +230,9 @@ bool File::GetInfo(Info* info) { |
File::Error File::Lock() { |
DCHECK(IsValid()); |
+ |
+ TRACE_EVENT1(kTraceGroup, "Lock", "path", path_.AsUTF8Unsafe()); |
+ |
BOOL result = LockFile(file_.Get(), 0, 0, MAXDWORD, MAXDWORD); |
if (!result) |
return OSErrorToFileError(GetLastError()); |
@@ -213,6 +241,9 @@ File::Error File::Lock() { |
File::Error File::Unlock() { |
DCHECK(IsValid()); |
+ |
+ TRACE_EVENT1(kTraceGroup, "Unlock", "path", path_.AsUTF8Unsafe()); |
+ |
BOOL result = UnlockFile(file_.Get(), 0, 0, MAXDWORD, MAXDWORD); |
if (!result) |
return OSErrorToFileError(GetLastError()); |
@@ -223,6 +254,8 @@ File File::Duplicate() { |
if (!IsValid()) |
return File(); |
+ TRACE_EVENT1(kTraceGroup, "Duplicate", "path", path_.AsUTF8Unsafe()); |
+ |
HANDLE other_handle = nullptr; |
if (!::DuplicateHandle(GetCurrentProcess(), // hSourceProcessHandle |
@@ -278,10 +311,12 @@ File::Error File::OSErrorToFileError(DWORD last_error) { |
} |
} |
-void File::DoInitialize(const FilePath& name, uint32 flags) { |
+void File::DoInitialize(uint32 flags) { |
ThreadRestrictions::AssertIOAllowed(); |
DCHECK(!IsValid()); |
+ TRACE_EVENT1(kTraceGroup, "Initialize", "path", path_.AsUTF8Unsafe()); |
+ |
DWORD disposition = 0; |
if (flags & FLAG_OPEN) |
@@ -346,7 +381,7 @@ void File::DoInitialize(const FilePath& name, uint32 flags) { |
if (flags & FLAG_BACKUP_SEMANTICS) |
create_flags |= FILE_FLAG_BACKUP_SEMANTICS; |
- file_.Set(CreateFile(name.value().c_str(), access, sharing, NULL, |
+ file_.Set(CreateFile(path_.value().c_str(), access, sharing, NULL, |
disposition, create_flags, NULL)); |
if (file_.IsValid()) { |
@@ -365,6 +400,8 @@ void File::DoInitialize(const FilePath& name, uint32 flags) { |
bool File::DoFlush() { |
ThreadRestrictions::AssertIOAllowed(); |
DCHECK(IsValid()); |
+ |
+ TRACE_EVENT1(kTraceGroup, "Flush", "path", path_.AsUTF8Unsafe()); |
return ::FlushFileBuffers(file_.Get()) != FALSE; |
} |