mirror of
https://github.com/dart-lang/sdk
synced 2024-09-20 00:11:50 +00:00
[vm] A couple more benchmark for kernel loading
One that measures the two existing benchmarks together, and one that measures max RSS. Change-Id: I2c8e383c1e7f38ea8010f3bd6a4bcbcacb999069 Reviewed-on: https://dart-review.googlesource.com/c/79822 Commit-Queue: Zach Anderson <zra@google.com> Reviewed-by: Alexander Markov <alexmarkov@google.com>
This commit is contained in:
parent
f3c51a4be0
commit
dea6c97a08
|
@ -89,7 +89,6 @@ dart/data_uri_spawn_test: SkipByDesign # Isolate.spawnUri
|
|||
dart/issue32950_test: SkipByDesign # uses spawnUri.
|
||||
|
||||
[ $runtime == vm && $mode == product && $compiler == dartk ]
|
||||
cc/GenKernelKernelReadAllBytecode: Crash
|
||||
cc/CorelibIsolateStartup: Timeout, Pass
|
||||
|
||||
[ $runtime != vm ]
|
||||
|
@ -110,6 +109,8 @@ cc/Profiler_ContextAllocation: Fail, Pass # Flaky on Windows --- sometimes give
|
|||
cc/Service_Profile: Skip
|
||||
cc/GenKernelKernelLoadKernel: Skip # Issue 34542.
|
||||
cc/GenKernelKernelReadAllBytecode: Skip # Issue 34393.
|
||||
cc/GenKernelKernelCombined: Skip # Issue 34393.
|
||||
cc/GenKernelKernelMaxRSS: Skip # Issue 34393.
|
||||
dart/appjit_bytecode_simple_test: Skip # Issue 34393.
|
||||
|
||||
[ !$strong ]
|
||||
|
|
|
@ -137,36 +137,10 @@ static char* ComputeGenKernelKernelPath(const char* arg) {
|
|||
return strdup(buffer);
|
||||
}
|
||||
|
||||
BENCHMARK(GenKernelKernelLoadKernel) {
|
||||
char* dill_path = ComputeGenKernelKernelPath(Benchmark::Executable());
|
||||
File* file = File::Open(NULL, dill_path, File::kRead);
|
||||
EXPECT(file != NULL);
|
||||
bin::RefCntReleaseScope<File> rs(file);
|
||||
intptr_t kernel_buffer_size = file->Length();
|
||||
uint8_t* kernel_buffer =
|
||||
reinterpret_cast<uint8_t*>(malloc(kernel_buffer_size));
|
||||
EXPECT(kernel_buffer != NULL);
|
||||
bool read_fully = file->ReadFully(kernel_buffer, kernel_buffer_size);
|
||||
EXPECT(read_fully);
|
||||
|
||||
Timer timer(true, "GenKernelKernelLoadKernel benchmark");
|
||||
timer.Start();
|
||||
|
||||
Dart_Handle result =
|
||||
Dart_LoadLibraryFromKernel(kernel_buffer, kernel_buffer_size);
|
||||
EXPECT_VALID(result);
|
||||
|
||||
result = Dart_FinalizeLoading(false);
|
||||
EXPECT_VALID(result);
|
||||
|
||||
timer.Stop();
|
||||
int64_t elapsed_time = timer.TotalElapsedTime();
|
||||
benchmark->set_score(elapsed_time);
|
||||
free(dill_path);
|
||||
free(kernel_buffer);
|
||||
}
|
||||
|
||||
BENCHMARK(GenKernelKernelReadAllBytecode) {
|
||||
static int64_t GenKernelKernelBenchmark(const char* name,
|
||||
bool benchmark_load,
|
||||
bool benchmark_read_bytecode) {
|
||||
EXPECT(benchmark_load || benchmark_read_bytecode);
|
||||
bin::Builtin::SetNativeResolver(bin::Builtin::kBuiltinLibrary);
|
||||
bin::Builtin::SetNativeResolver(bin::Builtin::kIOLibrary);
|
||||
bin::Builtin::SetNativeResolver(bin::Builtin::kCLILibrary);
|
||||
|
@ -184,6 +158,11 @@ BENCHMARK(GenKernelKernelReadAllBytecode) {
|
|||
bool enable_interpreter_orig = FLAG_enable_interpreter;
|
||||
FLAG_enable_interpreter = true;
|
||||
|
||||
Timer timer(true, name);
|
||||
if (benchmark_load) {
|
||||
timer.Start();
|
||||
}
|
||||
|
||||
Dart_Handle result =
|
||||
Dart_LoadLibraryFromKernel(kernel_buffer, kernel_buffer_size);
|
||||
EXPECT_VALID(result);
|
||||
|
@ -191,18 +170,49 @@ BENCHMARK(GenKernelKernelReadAllBytecode) {
|
|||
result = Dart_FinalizeLoading(false);
|
||||
EXPECT_VALID(result);
|
||||
|
||||
Timer timer(true, "GenKernelKernelLoadKernel benchmark");
|
||||
timer.Start();
|
||||
if (benchmark_read_bytecode && !benchmark_load) {
|
||||
timer.Start();
|
||||
}
|
||||
|
||||
result = Dart_ReadAllBytecode();
|
||||
EXPECT_VALID(result);
|
||||
if (benchmark_read_bytecode) {
|
||||
result = Dart_ReadAllBytecode();
|
||||
EXPECT_VALID(result);
|
||||
}
|
||||
|
||||
timer.Stop();
|
||||
int64_t elapsed_time = timer.TotalElapsedTime();
|
||||
benchmark->set_score(elapsed_time);
|
||||
FLAG_enable_interpreter = enable_interpreter_orig;
|
||||
free(dill_path);
|
||||
free(kernel_buffer);
|
||||
return elapsed_time;
|
||||
}
|
||||
|
||||
BENCHMARK(GenKernelKernelLoadKernel) {
|
||||
benchmark->set_score(
|
||||
GenKernelKernelBenchmark("GenKernelKernelLoadKernel benchmark",
|
||||
/* benchmark_load */ true,
|
||||
/* benchmark_read_bytecode */ false));
|
||||
}
|
||||
|
||||
BENCHMARK(GenKernelKernelReadAllBytecode) {
|
||||
benchmark->set_score(
|
||||
GenKernelKernelBenchmark("GenKernelKernelReadAllBytecode benchmark",
|
||||
/* benchmark_load */ false,
|
||||
/* benchmark_read_bytecode */ true));
|
||||
}
|
||||
|
||||
BENCHMARK(GenKernelKernelCombined) {
|
||||
benchmark->set_score(
|
||||
GenKernelKernelBenchmark("GenKernelKernelCombined benchmark",
|
||||
/* benchmark_load */ true,
|
||||
/* benchmark_read_bytecode */ true));
|
||||
}
|
||||
|
||||
BENCHMARK(GenKernelKernelMaxRSS) {
|
||||
GenKernelKernelBenchmark("GenKernelKernelMaxRSS benchmark",
|
||||
/* benchmark_load */ false,
|
||||
/* benchmark_read_bytecode */ true);
|
||||
benchmark->set_score(bin::Process::MaxRSS());
|
||||
}
|
||||
|
||||
//
|
||||
|
|
|
@ -15028,10 +15028,10 @@ RawCode* Code::FinalizeBytecode(const void* bytecode_data,
|
|||
instrs_region.CopyFrom(0, bytecode_region);
|
||||
|
||||
// TODO(regis): Keep following lines or not?
|
||||
code.set_compile_timestamp(OS::GetCurrentMonotonicMicros());
|
||||
// TODO(regis): Do we need to notify CodeObservers for bytecode too?
|
||||
// If so, provide a better name using ToLibNamePrefixedQualifiedCString().
|
||||
#ifndef PRODUCT
|
||||
code.set_compile_timestamp(OS::GetCurrentMonotonicMicros());
|
||||
CodeObservers::NotifyAll("bytecode", instrs.PayloadStart(),
|
||||
0 /* prologue_offset */, instrs.Size(),
|
||||
false /* optimized */, nullptr);
|
||||
|
@ -15053,10 +15053,12 @@ RawCode* Code::FinalizeBytecode(const void* bytecode_data,
|
|||
instrs.raw()->Size(), VirtualMemory::kReadExecute);
|
||||
}
|
||||
}
|
||||
#ifndef PRODUCT
|
||||
// No Code::Comments to set. Default is 0 length Comments.
|
||||
// No prologue was ever entered, optimistically assume nothing was ever
|
||||
// pushed onto the stack.
|
||||
code.SetPrologueOffset(bytecode_size); // TODO(regis): Correct?
|
||||
#endif
|
||||
return code.raw();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue