Chromium Code Reviews| Index: base/files/file_win.cc |
| diff --git a/base/files/file_win.cc b/base/files/file_win.cc |
| index 200ea296644a06238e21642313e831a1845a6596..8e3819ff994524fc3bc7d916cbcc159f647fd65b 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(); |
| + ScopedFileTrace trace(path_, "Close", 0); |
| + file_.Close(); |
| } |
| int64 File::Seek(Whence whence, int64 offset) { |
| ThreadRestrictions::AssertIOAllowed(); |
| DCHECK(IsValid()); |
| + ScopedFileTrace trace(path_, "Seek", 0); |
| + |
| 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; |
| + ScopedFileTrace trace(path_, "Read", size); |
| + |
| LARGE_INTEGER offset_li; |
| offset_li.QuadPart = offset; |
| @@ -79,6 +85,8 @@ int File::ReadAtCurrentPos(char* data, int size) { |
| if (size < 0) |
| return -1; |
| + ScopedFileTrace trace(path_, "ReadAtCurrentPos", size); |
| + |
| DWORD bytes_read; |
| if (::ReadFile(file_.Get(), data, size, &bytes_read, NULL)) |
| return bytes_read; |
| @@ -101,6 +109,8 @@ int File::Write(int64 offset, const char* data, int size) { |
| DCHECK(IsValid()); |
| DCHECK(!async_); |
| + ScopedFileTrace trace(path_, "Write", size); |
| + |
| LARGE_INTEGER offset_li; |
| offset_li.QuadPart = offset; |
| @@ -122,6 +132,8 @@ int File::WriteAtCurrentPos(const char* data, int size) { |
| if (size < 0) |
| return -1; |
| + ScopedFileTrace trace(path_, "WriteAtCurrentPos", size); |
|
Dan Beam
2015/04/24 03:45:18
It's also arguable that we'd just want these all t
|
| + |
| DWORD bytes_written; |
| if (::WriteFile(file_.Get(), data, size, &bytes_written, NULL)) |
| return bytes_written; |
| @@ -136,6 +148,9 @@ int File::WriteAtCurrentPosNoBestEffort(const char* data, int size) { |
| int64 File::GetLength() { |
| ThreadRestrictions::AssertIOAllowed(); |
| DCHECK(IsValid()); |
| + |
| + ScopedFileTrace trace(path_, "GetLength", 0); |
| + |
| LARGE_INTEGER size; |
| if (!::GetFileSizeEx(file_.Get(), &size)) |
| return -1; |
| @@ -147,6 +162,8 @@ bool File::SetLength(int64 length) { |
| ThreadRestrictions::AssertIOAllowed(); |
| DCHECK(IsValid()); |
| + ScopedFileTrace trace(path_, "SetLength", length); |
|
Dan Beam
2015/04/24 03:45:18
Also, should I be passing length here?
|
| + |
| // Get the current file pointer. |
| LARGE_INTEGER file_pointer; |
| LARGE_INTEGER zero; |
| @@ -176,6 +193,8 @@ bool File::SetTimes(Time last_access_time, Time last_modified_time) { |
| ThreadRestrictions::AssertIOAllowed(); |
| DCHECK(IsValid()); |
| + ScopedFileTrace trace(path_, "SetTimes", 0); |
| + |
| 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 +205,8 @@ bool File::GetInfo(Info* info) { |
| ThreadRestrictions::AssertIOAllowed(); |
| DCHECK(IsValid()); |
| + ScopedFileTrace trace(path_, "GetInfo", 0); |
| + |
| BY_HANDLE_FILE_INFORMATION file_info; |
| if (!GetFileInformationByHandle(file_.Get(), &file_info)) |
| return false; |
| @@ -205,6 +226,9 @@ bool File::GetInfo(Info* info) { |
| File::Error File::Lock() { |
| DCHECK(IsValid()); |
| + |
| + ScopedFileTrace trace(path_, "Lock", 0); |
| + |
| BOOL result = LockFile(file_.Get(), 0, 0, MAXDWORD, MAXDWORD); |
| if (!result) |
| return OSErrorToFileError(GetLastError()); |
| @@ -213,6 +237,9 @@ File::Error File::Lock() { |
| File::Error File::Unlock() { |
| DCHECK(IsValid()); |
| + |
| + ScopedFileTrace trace(path_, "Unlock", 0); |
| + |
| BOOL result = UnlockFile(file_.Get(), 0, 0, MAXDWORD, MAXDWORD); |
| if (!result) |
| return OSErrorToFileError(GetLastError()); |
| @@ -223,6 +250,8 @@ File File::Duplicate() { |
| if (!IsValid()) |
| return File(); |
| + ScopedFileTrace trace(path_, "Duplicate", 0); |
| + |
| HANDLE other_handle = nullptr; |
| if (!::DuplicateHandle(GetCurrentProcess(), // hSourceProcessHandle |
| @@ -278,10 +307,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()); |
| + ScopedFileTrace trace(path_, "Initialize", 0); |
| + |
| DWORD disposition = 0; |
| if (flags & FLAG_OPEN) |
| @@ -346,7 +377,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 +396,8 @@ void File::DoInitialize(const FilePath& name, uint32 flags) { |
| bool File::DoFlush() { |
| ThreadRestrictions::AssertIOAllowed(); |
| DCHECK(IsValid()); |
| + |
| + ScopedFileTrace trace(path_, "Flush", 0); |
| return ::FlushFileBuffers(file_.Get()) != FALSE; |
| } |