Fix crashes of some CPU profiler tests on Windows after r16284
All the tests that started crashing create ProfilerEventsProcessor on the stack. After r16284 SamplingCircularQueue buffer is allocated as a field of the queue instead of separate heap object. This increased self size of ProfilerEventsProcessor by about 1Mb. Windows malloc fails to allocate such an object on the stack and crashes. BUG= R=jkummerow@chromium.org Review URL: https://codereview.chromium.org/23093022 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16287 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
971df386b3
commit
140ebd974e
@ -31,6 +31,7 @@
|
||||
#include "cpu-profiler-inl.h"
|
||||
#include "cctest.h"
|
||||
#include "platform.h"
|
||||
#include "smart-pointers.h"
|
||||
#include "utils.h"
|
||||
#include "../include/v8-profiler.h"
|
||||
using i::CodeEntry;
|
||||
@ -42,16 +43,17 @@ using i::ProfileGenerator;
|
||||
using i::ProfileNode;
|
||||
using i::ProfilerEventsProcessor;
|
||||
using i::ScopedVector;
|
||||
using i::SmartPointer;
|
||||
using i::Vector;
|
||||
|
||||
|
||||
TEST(StartStop) {
|
||||
CpuProfilesCollection profiles;
|
||||
ProfileGenerator generator(&profiles);
|
||||
ProfilerEventsProcessor processor(&generator);
|
||||
processor.Start();
|
||||
processor.StopSynchronously();
|
||||
processor.Join();
|
||||
SmartPointer<ProfilerEventsProcessor> processor(
|
||||
new ProfilerEventsProcessor(&generator));
|
||||
processor->Start();
|
||||
processor->StopSynchronously();
|
||||
}
|
||||
|
||||
|
||||
@ -140,9 +142,10 @@ TEST(CodeEvents) {
|
||||
CpuProfilesCollection* profiles = new CpuProfilesCollection;
|
||||
profiles->StartProfiling("", 1, false);
|
||||
ProfileGenerator generator(profiles);
|
||||
ProfilerEventsProcessor processor(&generator);
|
||||
processor.Start();
|
||||
CpuProfiler profiler(isolate, profiles, &generator, &processor);
|
||||
SmartPointer<ProfilerEventsProcessor> processor(
|
||||
new ProfilerEventsProcessor(&generator));
|
||||
processor->Start();
|
||||
CpuProfiler profiler(isolate, profiles, &generator, *processor);
|
||||
|
||||
// Enqueue code creation events.
|
||||
const char* aaa_str = "aaa";
|
||||
@ -157,10 +160,9 @@ TEST(CodeEvents) {
|
||||
profiler.CodeCreateEvent(i::Logger::STUB_TAG, args4_code, 4);
|
||||
|
||||
// Enqueue a tick event to enable code events processing.
|
||||
EnqueueTickSampleEvent(&processor, aaa_code->address());
|
||||
EnqueueTickSampleEvent(*processor, aaa_code->address());
|
||||
|
||||
processor.StopSynchronously();
|
||||
processor.Join();
|
||||
processor->StopSynchronously();
|
||||
|
||||
// Check the state of profile generator.
|
||||
CodeEntry* aaa = generator.code_map()->FindEntry(aaa_code->address());
|
||||
@ -202,27 +204,27 @@ TEST(TickEvents) {
|
||||
CpuProfilesCollection* profiles = new CpuProfilesCollection;
|
||||
profiles->StartProfiling("", 1, false);
|
||||
ProfileGenerator generator(profiles);
|
||||
ProfilerEventsProcessor processor(&generator);
|
||||
processor.Start();
|
||||
CpuProfiler profiler(isolate, profiles, &generator, &processor);
|
||||
SmartPointer<ProfilerEventsProcessor> processor(
|
||||
new ProfilerEventsProcessor(&generator));
|
||||
processor->Start();
|
||||
CpuProfiler profiler(isolate, profiles, &generator, *processor);
|
||||
|
||||
profiler.CodeCreateEvent(i::Logger::BUILTIN_TAG, frame1_code, "bbb");
|
||||
profiler.CodeCreateEvent(i::Logger::STUB_TAG, frame2_code, 5);
|
||||
profiler.CodeCreateEvent(i::Logger::BUILTIN_TAG, frame3_code, "ddd");
|
||||
|
||||
EnqueueTickSampleEvent(&processor, frame1_code->instruction_start());
|
||||
EnqueueTickSampleEvent(*processor, frame1_code->instruction_start());
|
||||
EnqueueTickSampleEvent(
|
||||
&processor,
|
||||
*processor,
|
||||
frame2_code->instruction_start() + frame2_code->ExecutableSize() / 2,
|
||||
frame1_code->instruction_start() + frame2_code->ExecutableSize() / 2);
|
||||
EnqueueTickSampleEvent(
|
||||
&processor,
|
||||
*processor,
|
||||
frame3_code->instruction_end() - 1,
|
||||
frame2_code->instruction_end() - 1,
|
||||
frame1_code->instruction_end() - 1);
|
||||
|
||||
processor.StopSynchronously();
|
||||
processor.Join();
|
||||
processor->StopSynchronously();
|
||||
CpuProfile* profile = profiles->StopProfiling("");
|
||||
CHECK_NE(NULL, profile);
|
||||
|
||||
@ -271,23 +273,23 @@ TEST(Issue1398) {
|
||||
CpuProfilesCollection* profiles = new CpuProfilesCollection;
|
||||
profiles->StartProfiling("", 1, false);
|
||||
ProfileGenerator generator(profiles);
|
||||
ProfilerEventsProcessor processor(&generator);
|
||||
processor.Start();
|
||||
CpuProfiler profiler(isolate, profiles, &generator, &processor);
|
||||
SmartPointer<ProfilerEventsProcessor> processor(
|
||||
new ProfilerEventsProcessor(&generator));
|
||||
processor->Start();
|
||||
CpuProfiler profiler(isolate, profiles, &generator, *processor);
|
||||
|
||||
profiler.CodeCreateEvent(i::Logger::BUILTIN_TAG, code, "bbb");
|
||||
|
||||
i::TickSample* sample = processor.StartTickSample();
|
||||
i::TickSample* sample = processor->StartTickSample();
|
||||
sample->pc = code->address();
|
||||
sample->tos = 0;
|
||||
sample->frames_count = i::TickSample::kMaxFramesCount;
|
||||
for (int i = 0; i < sample->frames_count; ++i) {
|
||||
sample->stack[i] = code->address();
|
||||
}
|
||||
processor.FinishTickSample();
|
||||
processor->FinishTickSample();
|
||||
|
||||
processor.StopSynchronously();
|
||||
processor.Join();
|
||||
processor->StopSynchronously();
|
||||
CpuProfile* profile = profiles->StopProfiling("");
|
||||
CHECK_NE(NULL, profile);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user