summaryrefslogtreecommitdiffstats
path: root/net/disk_cache
diff options
context:
space:
mode:
authorphajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2008-12-11 20:14:13 +0000
committerphajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2008-12-11 20:14:13 +0000
commitafa5a314c7d3698c8065ba824e5700c2af211844 (patch)
tree3be3f505dd3d5609eaaae5c0189892fa30302885 /net/disk_cache
parent1ecbf13615d89a0e0369cab2e70692d5b9a46341 (diff)
downloadchromium_src-afa5a314c7d3698c8065ba824e5700c2af211844.zip
chromium_src-afa5a314c7d3698c8065ba824e5700c2af211844.tar.gz
chromium_src-afa5a314c7d3698c8065ba824e5700c2af211844.tar.bz2
Reverting 6815.
Review URL: http://codereview.chromium.org/14006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@6816 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/disk_cache')
-rw-r--r--net/disk_cache/disk_cache_perftest.cc101
1 files changed, 83 insertions, 18 deletions
diff --git a/net/disk_cache/disk_cache_perftest.cc b/net/disk_cache/disk_cache_perftest.cc
index 08d0374..ecae2c3 100644
--- a/net/disk_cache/disk_cache_perftest.cc
+++ b/net/disk_cache/disk_cache_perftest.cc
@@ -2,14 +2,17 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include <fcntl.h>
+
#include <string>
#include "base/basictypes.h"
-#include "base/file_path.h"
#include "base/file_util.h"
#include "base/perftimer.h"
+#if defined(OS_WIN)
+#include "base/scoped_handle.h"
+#endif
#include "base/string_util.h"
-#include "base/test_file_util.h"
#include "base/timer.h"
#include "net/base/net_errors.h"
#include "net/disk_cache/block_files.h"
@@ -29,6 +32,62 @@ typedef PlatformTest DiskCacheTest;
namespace {
+bool EvictFileFromSystemCache(const wchar_t* name) {
+#if defined(OS_WIN)
+ // Overwrite it with no buffering.
+ ScopedHandle file(CreateFile(name, GENERIC_READ | GENERIC_WRITE,
+ FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
+ OPEN_EXISTING, FILE_FLAG_NO_BUFFERING, NULL));
+ if (!file.IsValid())
+ 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[128 * 1024];
+ int total_bytes = 0;
+ DWORD bytes_read;
+ for (;;) {
+ if (!ReadFile(file, buffer, sizeof(buffer), &bytes_read, NULL))
+ return false;
+ if (bytes_read == 0)
+ break;
+
+ bool final = false;
+ if (bytes_read < sizeof(buffer))
+ final = true;
+
+ DWORD to_write = final ? sizeof(buffer) : bytes_read;
+
+ DWORD actual;
+ SetFilePointer(file, total_bytes, 0, FILE_BEGIN);
+ if (!WriteFile(file, buffer, to_write, &actual, NULL))
+ return false;
+ total_bytes += bytes_read;
+
+ if (final) {
+ SetFilePointer(file, total_bytes, 0, FILE_BEGIN);
+ SetEndOfFile(file);
+ break;
+ }
+ }
+ return true;
+#elif defined(OS_LINUX)
+ int fd = open(WideToUTF8(std::wstring(name)).c_str(), O_RDONLY);
+ if (fd < 0)
+ return false;
+ if (fdatasync(fd) != 0)
+ return false;
+ if (posix_fadvise(fd, 0, 0, POSIX_FADV_DONTNEED) != 0)
+ return false;
+ close(fd);
+ return true;
+#else
+ // TODO(port): Mac has its own way to do this.
+ NOTIMPLEMENTED();
+ return false;
+#endif
+}
+
struct TestEntry {
std::string key;
int data_len;
@@ -155,10 +214,9 @@ TEST_F(DiskCacheTest, Hash) {
TEST_F(DiskCacheTest, CacheBackendPerformance) {
MessageLoopForIO message_loop;
- std::wstring path_wstring = GetCachePath();
- ASSERT_TRUE(DeleteCache(path_wstring.c_str()));
- disk_cache::Backend* cache = disk_cache::CreateCacheBackend(path_wstring,
- false, 0);
+ std::wstring path = GetCachePath();
+ ASSERT_TRUE(DeleteCache(path.c_str()));
+ disk_cache::Backend* cache = disk_cache::CreateCacheBackend(path, false, 0);
ASSERT_TRUE(NULL != cache);
int seed = static_cast<int>(Time::Now().ToInternalValue());
@@ -173,20 +231,27 @@ TEST_F(DiskCacheTest, CacheBackendPerformance) {
MessageLoop::current()->RunAllPending();
delete cache;
- FilePath path = FilePath::FromWStringHack(path_wstring);
+ std::wstring filename(path);
+ file_util::AppendToPath(&filename, L"index");
+ ASSERT_TRUE(EvictFileFromSystemCache(filename.c_str()));
+
+ filename = path;
+ file_util::AppendToPath(&filename, L"data_0");
+ ASSERT_TRUE(EvictFileFromSystemCache(filename.c_str()));
+
+ filename = path;
+ file_util::AppendToPath(&filename, L"data_1");
+ ASSERT_TRUE(EvictFileFromSystemCache(filename.c_str()));
+
+ filename = path;
+ file_util::AppendToPath(&filename, L"data_2");
+ ASSERT_TRUE(EvictFileFromSystemCache(filename.c_str()));
- ASSERT_TRUE(file_util::EvictFileFromSystemCache(
- path.Append(FILE_PATH_LITERAL("index"))));
- ASSERT_TRUE(file_util::EvictFileFromSystemCache(
- path.Append(FILE_PATH_LITERAL("data_0"))));
- ASSERT_TRUE(file_util::EvictFileFromSystemCache(
- path.Append(FILE_PATH_LITERAL("data_1"))));
- ASSERT_TRUE(file_util::EvictFileFromSystemCache(
- path.Append(FILE_PATH_LITERAL("data_2"))));
- ASSERT_TRUE(file_util::EvictFileFromSystemCache(
- path.Append(FILE_PATH_LITERAL("data_3"))));
+ filename = path;
+ file_util::AppendToPath(&filename, L"data_3");
+ ASSERT_TRUE(EvictFileFromSystemCache(filename.c_str()));
- cache = disk_cache::CreateCacheBackend(path_wstring, false, 0);
+ cache = disk_cache::CreateCacheBackend(path, false, 0);
ASSERT_TRUE(NULL != cache);
ret = TimeRead(num_entries, cache, entries, true);