Index: base/files/file_win.cc |
diff --git a/base/files/file_win.cc b/base/files/file_win.cc |
index 200ea296644a06238e21642313e831a1845a6596..56c5959010d3964259a88b498b7ae90a7ac6c436 100644 |
--- a/base/files/file_win.cc |
+++ b/base/files/file_win.cc |
@@ -6,7 +6,7 @@ |
#include <io.h> |
-#include "base/files/file_path.h" |
+#include "base/files/file_tracing.h" |
#include "base/logging.h" |
#include "base/metrics/sparse_histogram.h" |
#include "base/threading/thread_restrictions.h" |
@@ -31,15 +31,19 @@ |
} |
void File::Close() { |
- if (file_.IsValid()) { |
- ThreadRestrictions::AssertIOAllowed(); |
- file_.Close(); |
- } |
+ if (!file_.IsValid()) |
+ return; |
+ |
+ ThreadRestrictions::AssertIOAllowed(); |
+ SCOPED_FILE_TRACE("Close"); |
+ file_.Close(); |
} |
int64 File::Seek(Whence whence, int64 offset) { |
ThreadRestrictions::AssertIOAllowed(); |
DCHECK(IsValid()); |
+ |
+ SCOPED_FILE_TRACE_WITH_SIZE("Seek", offset); |
LARGE_INTEGER distance, res; |
distance.QuadPart = offset; |
@@ -56,6 +60,8 @@ |
if (size < 0) |
return -1; |
+ SCOPED_FILE_TRACE_WITH_SIZE("Read", size); |
+ |
LARGE_INTEGER offset_li; |
offset_li.QuadPart = offset; |
@@ -79,6 +85,8 @@ |
if (size < 0) |
return -1; |
+ SCOPED_FILE_TRACE_WITH_SIZE("ReadAtCurrentPos", size); |
+ |
DWORD bytes_read; |
if (::ReadFile(file_.Get(), data, size, &bytes_read, NULL)) |
return bytes_read; |
@@ -89,10 +97,12 @@ |
} |
int File::ReadNoBestEffort(int64 offset, char* data, int size) { |
+ // TODO(dbeam): trace this separately? |
return Read(offset, data, size); |
} |
int File::ReadAtCurrentPosNoBestEffort(char* data, int size) { |
+ // TODO(dbeam): trace this separately? |
return ReadAtCurrentPos(data, size); |
} |
@@ -100,6 +110,8 @@ |
ThreadRestrictions::AssertIOAllowed(); |
DCHECK(IsValid()); |
DCHECK(!async_); |
+ |
+ SCOPED_FILE_TRACE_WITH_SIZE("Write", size); |
LARGE_INTEGER offset_li; |
offset_li.QuadPart = offset; |
@@ -122,6 +134,8 @@ |
if (size < 0) |
return -1; |
+ SCOPED_FILE_TRACE_WITH_SIZE("WriteAtCurrentPos", size); |
+ |
DWORD bytes_written; |
if (::WriteFile(file_.Get(), data, size, &bytes_written, NULL)) |
return bytes_written; |
@@ -136,6 +150,9 @@ |
int64 File::GetLength() { |
ThreadRestrictions::AssertIOAllowed(); |
DCHECK(IsValid()); |
+ |
+ SCOPED_FILE_TRACE("GetLength"); |
+ |
LARGE_INTEGER size; |
if (!::GetFileSizeEx(file_.Get(), &size)) |
return -1; |
@@ -146,6 +163,8 @@ |
bool File::SetLength(int64 length) { |
ThreadRestrictions::AssertIOAllowed(); |
DCHECK(IsValid()); |
+ |
+ SCOPED_FILE_TRACE_WITH_SIZE("SetLength", length); |
// Get the current file pointer. |
LARGE_INTEGER file_pointer; |
@@ -176,6 +195,8 @@ |
ThreadRestrictions::AssertIOAllowed(); |
DCHECK(IsValid()); |
+ SCOPED_FILE_TRACE("SetTimes"); |
+ |
FILETIME last_access_filetime = last_access_time.ToFileTime(); |
FILETIME last_modified_filetime = last_modified_time.ToFileTime(); |
return (::SetFileTime(file_.Get(), NULL, &last_access_filetime, |
@@ -185,6 +206,8 @@ |
bool File::GetInfo(Info* info) { |
ThreadRestrictions::AssertIOAllowed(); |
DCHECK(IsValid()); |
+ |
+ SCOPED_FILE_TRACE("GetInfo"); |
BY_HANDLE_FILE_INFORMATION file_info; |
if (!GetFileInformationByHandle(file_.Get(), &file_info)) |
@@ -205,6 +228,9 @@ |
File::Error File::Lock() { |
DCHECK(IsValid()); |
+ |
+ SCOPED_FILE_TRACE("Lock"); |
+ |
BOOL result = LockFile(file_.Get(), 0, 0, MAXDWORD, MAXDWORD); |
if (!result) |
return OSErrorToFileError(GetLastError()); |
@@ -213,6 +239,9 @@ |
File::Error File::Unlock() { |
DCHECK(IsValid()); |
+ |
+ SCOPED_FILE_TRACE("Unlock"); |
+ |
BOOL result = UnlockFile(file_.Get(), 0, 0, MAXDWORD, MAXDWORD); |
if (!result) |
return OSErrorToFileError(GetLastError()); |
@@ -222,6 +251,8 @@ |
File File::Duplicate() { |
if (!IsValid()) |
return File(); |
+ |
+ SCOPED_FILE_TRACE("Duplicate"); |
HANDLE other_handle = nullptr; |
@@ -278,7 +309,7 @@ |
} |
} |
-void File::DoInitialize(const FilePath& name, uint32 flags) { |
+void File::DoInitialize(uint32 flags) { |
ThreadRestrictions::AssertIOAllowed(); |
DCHECK(!IsValid()); |
@@ -346,7 +377,7 @@ |
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()) { |