Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2179)

Unified Diff: chrome_frame/test/perf/chrome_frame_perftest.cc

Issue 9235053: Add a PartialPreReadImage function to file_util (on Windows). (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Address feedback from Chris and Siggi Created 8 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« chrome/app/image_pre_reader_win.cc ('K') | « chrome_frame/chrome_frame.gyp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome_frame/test/perf/chrome_frame_perftest.cc
diff --git a/chrome_frame/test/perf/chrome_frame_perftest.cc b/chrome_frame/test/perf/chrome_frame_perftest.cc
index 06de3432a2eaf531a929568adb0de60bceee8a4b..c96169a20da514a72534596d09a3ea3b11eaeada 100644
--- a/chrome_frame/test/perf/chrome_frame_perftest.cc
+++ b/chrome_frame/test/perf/chrome_frame_perftest.cc
@@ -26,6 +26,7 @@
#include "base/win/scoped_bstr.h"
#include "base/win/scoped_comptr.h"
#include "base/win/scoped_variant.h"
+#include "chrome/app/image_pre_reader_win.h"
#include "chrome/common/chrome_constants.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/common/chrome_paths_internal.h"
@@ -408,23 +409,39 @@ class ChromeFrameStartupTestActiveX : public ChromeFrameStartupTest {
class ChromeFrameBinariesLoadTest : public ChromeFrameStartupTestActiveX {
static const size_t kStepSize = 4 * 1024;
public:
+ enum PreReadType {
+ kPreReadNone,
+ kPreReadPartial,
+ kPreReadFull
+ };
+
ChromeFrameBinariesLoadTest()
- : pre_read_(false),
+ : pre_read_type_(kPreReadNone),
step_size_(kStepSize),
- bytes_to_read_(0) {}
+ bytes_to_read_(0),
+ percentage_to_preread_(25) {}
protected:
virtual void RunStartupTestImpl(TimeTicks* start_time,
TimeTicks* end_time) {
*start_time = TimeTicks::Now();
- if (pre_read_) {
- EXPECT_TRUE(file_util::PreReadImage(chrome_exe_.value().c_str(),
- bytes_to_read_,
- step_size_));
- EXPECT_TRUE(file_util::PreReadImage(chrome_dll_.value().c_str(),
- bytes_to_read_,
- step_size_));
+ if (pre_read_type_ == kPreReadFull) {
+ EXPECT_TRUE(ImagePreReader::PreReadImage(chrome_exe_.value().c_str(),
+ bytes_to_read_,
+ step_size_));
+ EXPECT_TRUE(ImagePreReader::PreReadImage(chrome_dll_.value().c_str(),
+ bytes_to_read_,
+ step_size_));
+ } else if (pre_read_type_ == kPreReadPartial) {
+ EXPECT_TRUE(
+ ImagePreReader::PartialPreReadImage(chrome_exe_.value().c_str(),
+ percentage_to_preread_,
+ step_size_));
+ EXPECT_TRUE(
+ ImagePreReader::PartialPreReadImage(chrome_dll_.value().c_str(),
+ percentage_to_preread_,
+ step_size_));
}
HMODULE chrome_exe = LoadLibrary(chrome_exe_.value().c_str());
@@ -439,9 +456,10 @@ class ChromeFrameBinariesLoadTest : public ChromeFrameStartupTestActiveX {
FreeLibrary(chrome_dll);
}
- bool pre_read_;
+ PreReadType pre_read_type_;
size_t bytes_to_read_;
size_t step_size_;
+ uint8 percentage_to_preread_;
};
// This class provides functionality to run the startup performance test for
@@ -926,6 +944,91 @@ class SilverlightCreationTest : public ChromeFrameStartupTest {
}
};
+// TODO(rogerm): Flesh out the *PreReadImage* tests to validate an observed
+// change in paging behaviour between raw loading and pre-reading.
+
+// TODO(rogerm): Add checks to the *PreReadImage* tests to validate the
+// handling of invalid pe files and paths as input.
+
+TEST(ImagePreReader, PreReadImage) {
+ FilePath current_exe;
+ ASSERT_TRUE(PathService::Get(base::FILE_EXE, &current_exe));
+
+ int64 file_size_64 = 0;
+ ASSERT_TRUE(file_util::GetFileSize(current_exe, &file_size_64));
+ ASSERT_TRUE(file_size_64 < std::numeric_limits<std::size_t>::max());
+ size_t file_size = static_cast<size_t>(file_size_64);
+
+ const wchar_t* module_path = current_exe.value().c_str();
+ const size_t kStepSize = 2 * 1024 * 1024;
+
+ ASSERT_TRUE(
+ ImagePreReader::PreReadImage(module_path, 0, kStepSize));
+ ASSERT_TRUE(
+ ImagePreReader::PreReadImage(module_path, file_size / 4, kStepSize));
+ ASSERT_TRUE(
+ ImagePreReader::PreReadImage(module_path, file_size / 2, kStepSize));
+ ASSERT_TRUE(
+ ImagePreReader::PreReadImage(module_path, file_size, kStepSize));
+ ASSERT_TRUE(
+ ImagePreReader::PreReadImage(module_path, file_size * 2, kStepSize));
+}
+
+TEST(ImagePreReader, PartialPreReadImage) {
+ FilePath current_exe;
+ ASSERT_TRUE(PathService::Get(base::FILE_EXE, &current_exe));
+
+ const wchar_t* module_path = current_exe.value().c_str();
+ const size_t kStepSize = 2 * 1024 * 1024;
+
+ ASSERT_TRUE(
+ ImagePreReader::PartialPreReadImage(module_path, 0, kStepSize));
+ ASSERT_TRUE(
+ ImagePreReader::PartialPreReadImage(module_path, 25, kStepSize));
+ ASSERT_TRUE(
+ ImagePreReader::PartialPreReadImage(module_path, 50, kStepSize));
+ ASSERT_TRUE(
+ ImagePreReader::PartialPreReadImage(module_path, 100, kStepSize));
+ ASSERT_TRUE(
+ ImagePreReader::PartialPreReadImage(module_path, 150, kStepSize));
+}
+
+TEST(ImagePreReader, PartialPreReadImageOnDisk) {
+ FilePath current_exe;
+ ASSERT_TRUE(PathService::Get(base::FILE_EXE, &current_exe));
+
+ const wchar_t* module_path = current_exe.value().c_str();
+ const size_t kChunkSize = 2 * 1024 * 1024;
+
+ ASSERT_TRUE(
+ ImagePreReader::PartialPreReadImageOnDisk(module_path, 0, kChunkSize));
+ ASSERT_TRUE(
+ ImagePreReader::PartialPreReadImageOnDisk(module_path, 25, kChunkSize));
+ ASSERT_TRUE(
+ ImagePreReader::PartialPreReadImageOnDisk(module_path, 50, kChunkSize));
+ ASSERT_TRUE(
+ ImagePreReader::PartialPreReadImageOnDisk(module_path, 100, kChunkSize));
+ ASSERT_TRUE(
+ ImagePreReader::PartialPreReadImageOnDisk(module_path, 150, kChunkSize));
+}
+
+TEST(ImagePreReader, PartialPreReadImageInMemory) {
+ FilePath current_exe;
+ ASSERT_TRUE(PathService::Get(base::FILE_EXE, &current_exe));
+ const wchar_t* module_path = current_exe.value().c_str();
+
+ ASSERT_TRUE(
+ ImagePreReader::PartialPreReadImageInMemory(module_path, 0));
+ ASSERT_TRUE(
+ ImagePreReader::PartialPreReadImageInMemory(module_path, 25));
+ ASSERT_TRUE(
+ ImagePreReader::PartialPreReadImageInMemory(module_path, 50));
+ ASSERT_TRUE(
+ ImagePreReader::PartialPreReadImageInMemory(module_path, 100));
+ ASSERT_TRUE(
+ ImagePreReader::PartialPreReadImageInMemory(module_path, 150));
+}
+
TEST(ChromeFramePerf, DISABLED_HostActiveX) {
// TODO(stoyan): Create a low integrity level thread && perform the test there
SimpleModule module;
@@ -989,12 +1092,40 @@ TEST_F(ChromeFrameBinariesLoadTest, PerfCold) {
TEST_F(ChromeFrameBinariesLoadTest, PerfColdPreRead) {
FilePath binaries_to_evict[] = {chrome_exe_, chrome_dll_};
- pre_read_ = true;
+ pre_read_type_ = kPreReadFull;
RunStartupTest("binary_load_cold_preread", "t", "", true /* cold */,
arraysize(binaries_to_evict), binaries_to_evict,
false /* not important */, false);
}
+TEST_F(ChromeFrameBinariesLoadTest, PerfColdPartialPreRead15) {
+ FilePath binaries_to_evict[] = {chrome_exe_, chrome_dll_};
+ pre_read_type_ = kPreReadPartial;
+ percentage_to_preread_ = 15;
+ RunStartupTest("binary_load_cold_partial_preread", "t", "", true /* cold */,
+ arraysize(binaries_to_evict), binaries_to_evict,
+ false /* not important */, false);
+}
+
+
+TEST_F(ChromeFrameBinariesLoadTest, PerfColdPartialPreRead25) {
+ FilePath binaries_to_evict[] = {chrome_exe_, chrome_dll_};
+ pre_read_type_ = kPreReadPartial;
+ percentage_to_preread_ = 25;
+ RunStartupTest("binary_load_cold_partial_preread", "t", "", true /* cold */,
+ arraysize(binaries_to_evict), binaries_to_evict,
+ false /* not important */, false);
+}
+
+TEST_F(ChromeFrameBinariesLoadTest, PerfColdPartialPreRead40) {
+ FilePath binaries_to_evict[] = {chrome_exe_, chrome_dll_};
+ pre_read_type_ = kPreReadPartial;
+ percentage_to_preread_ = 40;
+ RunStartupTest("binary_load_cold_partial_preread", "t", "", true /* cold */,
+ arraysize(binaries_to_evict), binaries_to_evict,
+ false /* not important */, false);
+}
+
TEST_F(ChromeFrameStartupTestActiveXReference, PerfWarm) {
RunStartupTest("warm", "t_ref", "about:blank", false /* cold */, 0, NULL,
true /* important */, false);
« chrome/app/image_pre_reader_win.cc ('K') | « chrome_frame/chrome_frame.gyp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698