| Index: chrome/test/test_file_util.cc
|
| diff --git a/chrome/test/test_file_util.cc b/chrome/test/test_file_util.cc
|
| index 633fdc9c05f68f5776fc32d83de2eb736085e3b5..5bb55cc9fe6edaaaa60143245b4ca8190a15f26b 100644
|
| --- a/chrome/test/test_file_util.cc
|
| +++ b/chrome/test/test_file_util.cc
|
| @@ -12,6 +12,34 @@
|
|
|
| namespace file_util {
|
|
|
| +bool EvictFileFromSystemCache(const wchar_t* file) {
|
| + // Request exclusive access to the file and overwrite it with no buffering.
|
| + win_util::ScopedHandle hfile(
|
| + CreateFile(file, GENERIC_READ | GENERIC_WRITE, 0, NULL,
|
| + OPEN_EXISTING, FILE_FLAG_NO_BUFFERING,
|
| + NULL));
|
| + if (!hfile)
|
| + return false;
|
| +
|
| + // Execute in chunks. It could be optimized. We want to do few of these since
|
| + // these opterations will be slow without the cache.
|
| + char buffer[4096];
|
| + int total_bytes = 0;
|
| + DWORD bytes_read;
|
| + for (;;) {
|
| + bytes_read = 0;
|
| + ReadFile(hfile, buffer, sizeof(buffer), &bytes_read, NULL);
|
| + if (bytes_read == 0)
|
| + break;
|
| +
|
| + SetFilePointer(hfile, total_bytes, 0, FILE_BEGIN);
|
| + if (!WriteFile(hfile, buffer, bytes_read, &bytes_read, NULL))
|
| + return false;
|
| + total_bytes += bytes_read;
|
| + }
|
| + return true;
|
| +}
|
| +
|
| // Like CopyFileNoCache but recursively copies all files and subdirectories
|
| // in the given input directory to the output directory.
|
| bool CopyRecursiveDirNoCache(const std::wstring& source_dir,
|
| @@ -60,7 +88,7 @@ bool CopyRecursiveDirNoCache(const std::wstring& source_dir,
|
| // files that are in the repository, and they will have read-only set.
|
| // This will prevent us from evicting from the cache, but these don't
|
| // matter anyway.
|
| - file_util::EvictFileFromSystemCache(cur_dest_path.c_str());
|
| + EvictFileFromSystemCache(cur_dest_path.c_str());
|
| }
|
| } while (FindNextFile(fh, &fd));
|
|
|
|
|