Revision: 15484
Author:   [email protected]
Date:     Wed Jul  3 09:20:59 2013
Log:      Do not store fp and sp values in TickSample

Their values are not used neither by the tick processor nor by CpuProfiler so it is just a waste of space.

TickSample used to be a transport for grabbed register values to TickSample::Trace, now they are passed in a special structure RegisterState which is allocated on the stack for the sampling period.

Some common pieces were moved from platform-dependent code into Sampler::SampleStack and TickSample::Init.

BUG=None
[email protected], [email protected]

Review URL: https://codereview.chromium.org/18620002
http://code.google.com/p/v8/source/detail?r=15484

Modified:
 /branches/bleeding_edge/src/frames.cc
 /branches/bleeding_edge/src/frames.h
 /branches/bleeding_edge/src/log.cc
 /branches/bleeding_edge/src/sampler.cc
 /branches/bleeding_edge/src/sampler.h
 /branches/bleeding_edge/test/cctest/test-log-stack-tracer.cc
 /branches/bleeding_edge/test/mjsunit/tools/tickprocessor-test-func-info.log
 /branches/bleeding_edge/test/mjsunit/tools/tickprocessor-test.log
 /branches/bleeding_edge/tools/tickprocessor.js

=======================================
--- /branches/bleeding_edge/src/frames.cc       Wed Jul  3 07:04:37 2013
+++ /branches/bleeding_edge/src/frames.cc       Wed Jul  3 09:20:59 2013
@@ -216,10 +216,11 @@

 SafeStackFrameIterator::SafeStackFrameIterator(
     Isolate* isolate,
-    Address fp, Address sp, Address low_bound, Address high_bound) :
-    StackFrameIteratorBase(isolate, false),
-    low_bound_(low_bound), high_bound_(high_bound),
-    top_frame_type_(StackFrame::NONE) {
+    Address fp, Address sp, Address js_entry_sp)
+    : StackFrameIteratorBase(isolate, false),
+      low_bound_(sp),
+      high_bound_(js_entry_sp),
+      top_frame_type_(StackFrame::NONE) {
   StackFrame::State state;
   StackFrame::Type type;
   ThreadLocalTop* top = isolate->thread_local_top();
=======================================
--- /branches/bleeding_edge/src/frames.h        Wed Jul  3 07:04:37 2013
+++ /branches/bleeding_edge/src/frames.h        Wed Jul  3 09:20:59 2013
@@ -881,7 +881,7 @@
  public:
   SafeStackFrameIterator(Isolate* isolate,
                          Address fp, Address sp,
-                         Address low_bound, Address high_bound);
+                         Address js_entry_sp);

   inline JavaScriptFrame* frame() const;
   void Advance();
=======================================
--- /branches/bleeding_edge/src/log.cc  Wed Jul  3 08:39:18 2013
+++ /branches/bleeding_edge/src/log.cc  Wed Jul  3 09:20:59 2013
@@ -1364,8 +1364,6 @@
   LogMessageBuilder msg(this);
   msg.Append("%s,", kLogEventsNames[TICK_EVENT]);
   msg.AppendAddress(sample->pc);
-  msg.Append(',');
-  msg.AppendAddress(sample->sp);
   msg.Append(",%ld", static_cast<int>(OS::Ticks() - epoch_));
   if (sample->has_external_callback) {
     msg.Append(",1,");
=======================================
--- /branches/bleeding_edge/src/sampler.cc      Wed Jul  3 08:39:18 2013
+++ /branches/bleeding_edge/src/sampler.cc      Wed Jul  3 09:20:59 2013
@@ -231,44 +231,36 @@
 #endif


-class SampleHelper {
+#if defined(USE_SIMULATOR)
+class SimulatorHelper {
  public:
-  inline TickSample* Init(Sampler* sampler, Isolate* isolate) {
-#if defined(USE_SIMULATOR)
+  inline bool Init(Sampler* sampler, Isolate* isolate) {
     ThreadId thread_id = sampler->platform_data()->profiled_thread_id();
     Isolate::PerIsolateThreadData* per_thread_data = isolate->
         FindPerThreadDataForThread(thread_id);
-    if (!per_thread_data) return NULL;
+    if (!per_thread_data) return false;
     simulator_ = per_thread_data->simulator();
-    // Check if there is active simulator before allocating TickSample.
-    if (!simulator_) return NULL;
-#endif  // USE_SIMULATOR
-    TickSample* sample = isolate->cpu_profiler()->TickSampleEvent();
-    if (sample == NULL) sample = &sample_obj;
-    return sample;
+    // Check if there is active simulator.
+    return simulator_ != NULL;
   }

-#if defined(USE_SIMULATOR)
-  inline void FillRegisters(TickSample* sample) {
-    sample->pc = reinterpret_cast<Address>(simulator_->get_pc());
-    sample->sp = reinterpret_cast<Address>(simulator_->get_register(
+  inline void FillRegisters(RegisterState* state) {
+    state->pc = reinterpret_cast<Address>(simulator_->get_pc());
+    state->sp = reinterpret_cast<Address>(simulator_->get_register(
         Simulator::sp));
 #if V8_TARGET_ARCH_ARM
-    sample->fp = reinterpret_cast<Address>(simulator_->get_register(
+    state->fp = reinterpret_cast<Address>(simulator_->get_register(
         Simulator::r11));
 #elif V8_TARGET_ARCH_MIPS
-    sample->fp = reinterpret_cast<Address>(simulator_->get_register(
+    state->fp = reinterpret_cast<Address>(simulator_->get_register(
         Simulator::fp));
 #endif
   }
-#endif  // USE_SIMULATOR

  private:
-#if defined(USE_SIMULATOR)
   Simulator* simulator_;
-#endif
-  TickSample sample_obj;
 };
+#endif  // USE_SIMULATOR


 #if defined(USE_SIGNALS)
@@ -328,89 +320,86 @@
   Sampler* sampler = isolate->logger()->sampler();
   if (sampler == NULL || !sampler->IsActive()) return;

-  SampleHelper helper;
-  TickSample* sample = helper.Init(sampler, isolate);
-  if (sample == NULL) return;
+  RegisterState state;

 #if defined(USE_SIMULATOR)
-  helper.FillRegisters(sample);
+  SimulatorHelper helper;
+  if (!helper.Init(sampler, isolate)) return;
+  helper.FillRegisters(&state);
 #else
   // Extracting the sample from the context is extremely machine dependent.
   ucontext_t* ucontext = reinterpret_cast<ucontext_t*>(context);
   mcontext_t& mcontext = ucontext->uc_mcontext;
-  sample->state = isolate->current_vm_state();
 #if defined(__linux__) || defined(__ANDROID__)
 #if V8_HOST_ARCH_IA32
-  sample->pc = reinterpret_cast<Address>(mcontext.gregs[REG_EIP]);
-  sample->sp = reinterpret_cast<Address>(mcontext.gregs[REG_ESP]);
-  sample->fp = reinterpret_cast<Address>(mcontext.gregs[REG_EBP]);
+  state.pc = reinterpret_cast<Address>(mcontext.gregs[REG_EIP]);
+  state.sp = reinterpret_cast<Address>(mcontext.gregs[REG_ESP]);
+  state.fp = reinterpret_cast<Address>(mcontext.gregs[REG_EBP]);
 #elif V8_HOST_ARCH_X64
-  sample->pc = reinterpret_cast<Address>(mcontext.gregs[REG_RIP]);
-  sample->sp = reinterpret_cast<Address>(mcontext.gregs[REG_RSP]);
-  sample->fp = reinterpret_cast<Address>(mcontext.gregs[REG_RBP]);
+  state.pc = reinterpret_cast<Address>(mcontext.gregs[REG_RIP]);
+  state.sp = reinterpret_cast<Address>(mcontext.gregs[REG_RSP]);
+  state.fp = reinterpret_cast<Address>(mcontext.gregs[REG_RBP]);
 #elif V8_HOST_ARCH_ARM
 #if defined(__GLIBC__) && !defined(__UCLIBC__) && \
     (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ <= 3))
   // Old GLibc ARM versions used a gregs[] array to access the register
   // values from mcontext_t.
-  sample->pc = reinterpret_cast<Address>(mcontext.gregs[R15]);
-  sample->sp = reinterpret_cast<Address>(mcontext.gregs[R13]);
-  sample->fp = reinterpret_cast<Address>(mcontext.gregs[R11]);
+  state.pc = reinterpret_cast<Address>(mcontext.gregs[R15]);
+  state.sp = reinterpret_cast<Address>(mcontext.gregs[R13]);
+  state.fp = reinterpret_cast<Address>(mcontext.gregs[R11]);
 #else
-  sample->pc = reinterpret_cast<Address>(mcontext.arm_pc);
-  sample->sp = reinterpret_cast<Address>(mcontext.arm_sp);
-  sample->fp = reinterpret_cast<Address>(mcontext.arm_fp);
+  state.pc = reinterpret_cast<Address>(mcontext.arm_pc);
+  state.sp = reinterpret_cast<Address>(mcontext.arm_sp);
+  state.fp = reinterpret_cast<Address>(mcontext.arm_fp);
 #endif  // defined(__GLIBC__) && !defined(__UCLIBC__) &&
         // (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ <= 3))
 #elif V8_HOST_ARCH_MIPS
-  sample->pc = reinterpret_cast<Address>(mcontext.pc);
-  sample->sp = reinterpret_cast<Address>(mcontext.gregs[29]);
-  sample->fp = reinterpret_cast<Address>(mcontext.gregs[30]);
+  state.pc = reinterpret_cast<Address>(mcontext.pc);
+  state.sp = reinterpret_cast<Address>(mcontext.gregs[29]);
+  state.fp = reinterpret_cast<Address>(mcontext.gregs[30]);
 #endif  // V8_HOST_ARCH_*
 #elif defined(__FreeBSD__)
 #if V8_HOST_ARCH_IA32
-  sample->pc = reinterpret_cast<Address>(mcontext.mc_eip);
-  sample->sp = reinterpret_cast<Address>(mcontext.mc_esp);
-  sample->fp = reinterpret_cast<Address>(mcontext.mc_ebp);
+  state.pc = reinterpret_cast<Address>(mcontext.mc_eip);
+  state.sp = reinterpret_cast<Address>(mcontext.mc_esp);
+  state.fp = reinterpret_cast<Address>(mcontext.mc_ebp);
 #elif V8_HOST_ARCH_X64
-  sample->pc = reinterpret_cast<Address>(mcontext.mc_rip);
-  sample->sp = reinterpret_cast<Address>(mcontext.mc_rsp);
-  sample->fp = reinterpret_cast<Address>(mcontext.mc_rbp);
+  state.pc = reinterpret_cast<Address>(mcontext.mc_rip);
+  state.sp = reinterpret_cast<Address>(mcontext.mc_rsp);
+  state.fp = reinterpret_cast<Address>(mcontext.mc_rbp);
 #elif V8_HOST_ARCH_ARM
-  sample->pc = reinterpret_cast<Address>(mcontext.mc_r15);
-  sample->sp = reinterpret_cast<Address>(mcontext.mc_r13);
-  sample->fp = reinterpret_cast<Address>(mcontext.mc_r11);
+  state.pc = reinterpret_cast<Address>(mcontext.mc_r15);
+  state.sp = reinterpret_cast<Address>(mcontext.mc_r13);
+  state.fp = reinterpret_cast<Address>(mcontext.mc_r11);
 #endif  // V8_HOST_ARCH_*
 #elif defined(__NetBSD__)
 #if V8_HOST_ARCH_IA32
-  sample->pc = reinterpret_cast<Address>(mcontext.__gregs[_REG_EIP]);
-  sample->sp = reinterpret_cast<Address>(mcontext.__gregs[_REG_ESP]);
-  sample->fp = reinterpret_cast<Address>(mcontext.__gregs[_REG_EBP]);
+  state.pc = reinterpret_cast<Address>(mcontext.__gregs[_REG_EIP]);
+  state.sp = reinterpret_cast<Address>(mcontext.__gregs[_REG_ESP]);
+  state.fp = reinterpret_cast<Address>(mcontext.__gregs[_REG_EBP]);
 #elif V8_HOST_ARCH_X64
-  sample->pc = reinterpret_cast<Address>(mcontext.__gregs[_REG_RIP]);
-  sample->sp = reinterpret_cast<Address>(mcontext.__gregs[_REG_RSP]);
-  sample->fp = reinterpret_cast<Address>(mcontext.__gregs[_REG_RBP]);
+  state.pc = reinterpret_cast<Address>(mcontext.__gregs[_REG_RIP]);
+  state.sp = reinterpret_cast<Address>(mcontext.__gregs[_REG_RSP]);
+  state.fp = reinterpret_cast<Address>(mcontext.__gregs[_REG_RBP]);
 #endif  // V8_HOST_ARCH_*
 #elif defined(__OpenBSD__)
   USE(mcontext);
 #if V8_HOST_ARCH_IA32
-  sample->pc = reinterpret_cast<Address>(ucontext->sc_eip);
-  sample->sp = reinterpret_cast<Address>(ucontext->sc_esp);
-  sample->fp = reinterpret_cast<Address>(ucontext->sc_ebp);
+  state.pc = reinterpret_cast<Address>(ucontext->sc_eip);
+  state.sp = reinterpret_cast<Address>(ucontext->sc_esp);
+  state.fp = reinterpret_cast<Address>(ucontext->sc_ebp);
 #elif V8_HOST_ARCH_X64
-  sample->pc = reinterpret_cast<Address>(ucontext->sc_rip);
-  sample->sp = reinterpret_cast<Address>(ucontext->sc_rsp);
-  sample->fp = reinterpret_cast<Address>(ucontext->sc_rbp);
+  state.pc = reinterpret_cast<Address>(ucontext->sc_rip);
+  state.sp = reinterpret_cast<Address>(ucontext->sc_rsp);
+  state.fp = reinterpret_cast<Address>(ucontext->sc_rbp);
 #endif  // V8_HOST_ARCH_*
 #elif defined(__sun)
-  sample->pc = reinterpret_cast<Address>(mcontext.gregs[REG_PC]);
-  sample->sp = reinterpret_cast<Address>(mcontext.gregs[REG_SP]);
-  sample->fp = reinterpret_cast<Address>(mcontext.gregs[REG_FP]);
+  state.pc = reinterpret_cast<Address>(mcontext.gregs[REG_PC]);
+  state.sp = reinterpret_cast<Address>(mcontext.gregs[REG_SP]);
+  state.fp = reinterpret_cast<Address>(mcontext.gregs[REG_FP]);
 #endif  // __sun
 #endif  // USE_SIMULATOR
-
-  sampler->SampleStack(sample);
-  sampler->Tick(sample);
+  sampler->SampleStack(state);
 #endif  // __native_client__
 }

@@ -509,9 +498,10 @@
thread_act_t profiled_thread = sampler->platform_data()->profiled_thread();
     Isolate* isolate = sampler->isolate();

-    SampleHelper helper;
-    TickSample* sample = helper.Init(sampler, isolate);
-    if (sample == NULL) return;
+#if defined(USE_SIMULATOR)
+    SimulatorHelper helper;
+    if (!helper.Init(sampler, isolate)) return;
+#endif

     if (KERN_SUCCESS != thread_suspend(profiled_thread)) return;

@@ -541,17 +531,16 @@
                          flavor,
                          reinterpret_cast<natural_t*>(&state),
                          &count) == KERN_SUCCESS) {
-      sample->state = isolate->current_vm_state();
+      RegisterState state;
 #if defined(USE_SIMULATOR)
-      helper.FillRegisters(sample);
+      helper.FillRegisters(&state);
 #else
-      sample->pc = reinterpret_cast<Address>(state.REGISTER_FIELD(ip));
-      sample->sp = reinterpret_cast<Address>(state.REGISTER_FIELD(sp));
-      sample->fp = reinterpret_cast<Address>(state.REGISTER_FIELD(bp));
+      state.pc = reinterpret_cast<Address>(state.REGISTER_FIELD(ip));
+      state.sp = reinterpret_cast<Address>(state.REGISTER_FIELD(sp));
+      state.fp = reinterpret_cast<Address>(state.REGISTER_FIELD(bp));
 #endif  // USE_SIMULATOR
 #undef REGISTER_FIELD
-      sampler->SampleStack(sample);
-      sampler->Tick(sample);
+      sampler->SampleStack(state);
     }
     thread_resume(profiled_thread);
   }
@@ -563,34 +552,34 @@
     if (profiled_thread == NULL) return;

     Isolate* isolate = sampler->isolate();
-    SampleHelper helper;
-    TickSample* sample = helper.Init(sampler, isolate);
-    if (sample == NULL) return;
+#if defined(USE_SIMULATOR)
+    SimulatorHelper helper;
+    if (!helper.Init(sampler, isolate)) return;
+#endif

     const DWORD kSuspendFailed = static_cast<DWORD>(-1);
     if (SuspendThread(profiled_thread) == kSuspendFailed) return;
-    sample->state = isolate->current_vm_state();

     // Context used for sampling the register state of the profiled thread.
     CONTEXT context;
     memset(&context, 0, sizeof(context));
     context.ContextFlags = CONTEXT_FULL;
     if (GetThreadContext(profiled_thread, &context) != 0) {
+      RegisterState state;
 #if defined(USE_SIMULATOR)
-      helper.FillRegisters(sample);
+      helper.FillRegisters(&state);
 #else
 #if V8_HOST_ARCH_X64
-      sample->pc = reinterpret_cast<Address>(context.Rip);
-      sample->sp = reinterpret_cast<Address>(context.Rsp);
-      sample->fp = reinterpret_cast<Address>(context.Rbp);
+      state.pc = reinterpret_cast<Address>(context.Rip);
+      state.sp = reinterpret_cast<Address>(context.Rsp);
+      state.fp = reinterpret_cast<Address>(context.Rbp);
 #else
-      sample->pc = reinterpret_cast<Address>(context.Eip);
-      sample->sp = reinterpret_cast<Address>(context.Esp);
-      sample->fp = reinterpret_cast<Address>(context.Ebp);
+      state.pc = reinterpret_cast<Address>(context.Eip);
+      state.sp = reinterpret_cast<Address>(context.Esp);
+      state.fp = reinterpret_cast<Address>(context.Ebp);
 #endif
 #endif  // USE_SIMULATOR
-      sampler->SampleStack(sample);
-      sampler->Tick(sample);
+      sampler->SampleStack(state);
     }
     ResumeThread(profiled_thread);
   }
@@ -616,8 +605,11 @@
 //
 // StackTracer implementation
 //
-DISABLE_ASAN void TickSample::Trace(Isolate* isolate) {
+DISABLE_ASAN void TickSample::Init(Isolate* isolate,
+                                   const RegisterState& regs) {
   ASSERT(isolate->IsInitialized());
+  pc = regs.pc;
+  state = isolate->current_vm_state();

   // Avoid collecting traces while doing GC.
   if (state == GC) return;
@@ -636,11 +628,11 @@
   } else {
     // Sample potential return address value for frameless invocation of
     // stubs (we'll figure out later, if this value makes sense).
-    tos = Memory::Address_at(sp);
+    tos = Memory::Address_at(regs.sp);
     has_external_callback = false;
   }

-  SafeStackFrameIterator it(isolate, fp, sp, sp, js_entry_sp);
+  SafeStackFrameIterator it(isolate, regs.fp, regs.sp, js_entry_sp);
   top_frame_type = it.top_frame_type();
   int i = 0;
   while (!it.done() && i < TickSample::kMaxFramesCount) {
@@ -689,9 +681,13 @@
   SetActive(false);
 }

-void Sampler::SampleStack(TickSample* sample) {
-  sample->Trace(isolate_);
+void Sampler::SampleStack(const RegisterState& state) {
+  TickSample* sample = isolate_->cpu_profiler()->TickSampleEvent();
+  TickSample sample_obj;
+  if (sample == NULL) sample = &sample_obj;
+  sample->Init(isolate_, state);
   if (++samples_taken_ < 0) samples_taken_ = 0;
+  Tick(sample);
 }

 } }  // namespace v8::internal
=======================================
--- /branches/bleeding_edge/src/sampler.h       Wed Jul  3 08:39:18 2013
+++ /branches/bleeding_edge/src/sampler.h       Wed Jul  3 09:20:59 2013
@@ -44,22 +44,25 @@
 // (if used for profiling) the program counter and stack pointer for
 // the thread that created it.

+struct RegisterState {
+  RegisterState() : pc(NULL), sp(NULL), fp(NULL) {}
+  Address pc;      // Instruction pointer.
+  Address sp;      // Stack pointer.
+  Address fp;      // Frame pointer.
+};
+
 // TickSample captures the information collected for each sample.
 struct TickSample {
   TickSample()
       : state(OTHER),
         pc(NULL),
-        sp(NULL),
-        fp(NULL),
         external_callback(NULL),
         frames_count(0),
         has_external_callback(false),
         top_frame_type(StackFrame::NONE) {}
-  void Trace(Isolate* isolate);
+  void Init(Isolate* isolate, const RegisterState& state);
   StateTag state;  // The state of the VM.
   Address pc;      // Instruction pointer.
-  Address sp;      // Stack pointer.
-  Address fp;      // Frame pointer.
   union {
     Address tos;   // Top stack value (*sp).
     Address external_callback;
@@ -85,11 +88,7 @@
   int interval() const { return interval_; }

   // Performs stack sampling.
-  void SampleStack(TickSample* sample);
-
-  // This method is called for each sampling period with the current
-  // program counter.
-  virtual void Tick(TickSample* sample) = 0;
+  void SampleStack(const RegisterState& regs);

   // Start and stop sampler.
   void Start();
@@ -109,6 +108,11 @@

   class PlatformData;
   PlatformData* platform_data() const { return data_; }
+
+ protected:
+  // This method is called for each sampling period with the current
+  // program counter.
+  virtual void Tick(TickSample* sample) = 0;

  private:
   void SetActive(bool value) { NoBarrier_Store(&active_, value); }
=======================================
--- /branches/bleeding_edge/test/cctest/test-log-stack-tracer.cc Wed Jul 3 08:39:18 2013 +++ /branches/bleeding_edge/test/cctest/test-log-stack-tracer.cc Wed Jul 3 09:20:59 2013
@@ -52,6 +52,7 @@
 using v8::internal::Handle;
 using v8::internal::Isolate;
 using v8::internal::JSFunction;
+using v8::internal::RegisterState;
 using v8::internal::TickSample;


@@ -66,11 +67,12 @@


 static void DoTrace(Address fp) {
-  trace_env.sample->fp = fp;
+  RegisterState regs;
+  regs.fp = fp;
   // sp is only used to define stack high bound
-  trace_env.sample->sp =
+  regs.sp =
       reinterpret_cast<Address>(trace_env.sample) - 10240;
-  trace_env.sample->Trace(Isolate::Current());
+  trace_env.sample->Init(Isolate::Current(), regs);
 }


=======================================
--- /branches/bleeding_edge/test/mjsunit/tools/tickprocessor-test-func-info.log Fri Apr 19 04:55:01 2013 +++ /branches/bleeding_edge/test/mjsunit/tools/tickprocessor-test-func-info.log Wed Jul 3 09:20:59 2013
@@ -5,7 +5,7 @@
 code-creation,Stub,0,0x424260,348,"CompareStub_GE"
code-creation,LazyCompile,0,0x2a8100,18535,"DrawQube 3d-cube.js:188",0xf43abcac, code-creation,LazyCompile,0,0x480100,3908,"DrawLine 3d-cube.js:17",0xf43abc50,
-tick,0x424284,0xbfffeea0,0,0,0x480600,0,0x2aaaa5
-tick,0x42429f,0xbfffed88,0,0,0x480600,0,0x2aacb4
-tick,0x48063d,0xbfffec7c,0,0,0x2d0f7c,0,0x2aaec6
+tick,0x424284,0,0,0x480600,0,0x2aaaa5
+tick,0x42429f,0,0,0x480600,0,0x2aacb4
+tick,0x48063d,0,0,0x2d0f7c,0,0x2aaec6
 profiler,"end"
=======================================
--- /branches/bleeding_edge/test/mjsunit/tools/tickprocessor-test.log Fri Apr 19 04:55:01 2013 +++ /branches/bleeding_edge/test/mjsunit/tools/tickprocessor-test.log Wed Jul 3 09:20:59 2013
@@ -9,17 +9,17 @@
 function-creation,0xf441d280,0xf541d120
 code-creation,LoadIC,0,0xf541d280,117,"j"
 code-creation,LoadIC,0,0xf541d360,63,"i"
-tick,0x80f82d1,0xffdfe880,0,0,0,0,0xf541ce5c
-tick,0x80f89a1,0xffdfecf0,0,0,0,0,0xf541ce5c
-tick,0x8123b5c,0xffdff1a0,0,0,0,0,0xf541d1a1,0xf541ceea
-tick,0x8123b65,0xffdff1a0,0,0,0,0,0xf541d1a1,0xf541ceea
-tick,0xf541d2be,0xffdff1e4,0,0,0,0
-tick,0xf541d320,0xffdff1dc,0,0,0,0
-tick,0xf541d384,0xffdff1d8,0,0,0,0
-tick,0xf7db94da,0xffdff0ec,0,0,0,0,0xf541d1a1,0xf541ceea
-tick,0xf7db951c,0xffdff0f0,0,0,0,0,0xf541d1a1,0xf541ceea
-tick,0xf7dbc508,0xffdff14c,0,0,0,0,0xf541d1a1,0xf541ceea
-tick,0xf7dbff21,0xffdff198,0,0,0,0,0xf541d1a1,0xf541ceea
-tick,0xf7edec90,0xffdff0ec,0,0,0,0,0xf541d1a1,0xf541ceea
-tick,0xffffe402,0xffdff488,0,0,0,0
+tick,0x80f82d1,0,0,0,0,0xf541ce5c
+tick,0x80f89a1,0,0,0,0,0xf541ce5c
+tick,0x8123b5c,0,0,0,0,0xf541d1a1,0xf541ceea
+tick,0x8123b65,0,0,0,0,0xf541d1a1,0xf541ceea
+tick,0xf541d2be,0,0,0,0
+tick,0xf541d320,0,0,0,0
+tick,0xf541d384,0,0,0,0
+tick,0xf7db94da,0,0,0,0,0xf541d1a1,0xf541ceea
+tick,0xf7db951c,0,0,0,0,0xf541d1a1,0xf541ceea
+tick,0xf7dbc508,0,0,0,0,0xf541d1a1,0xf541ceea
+tick,0xf7dbff21,0,0,0,0,0xf541d1a1,0xf541ceea
+tick,0xf7edec90,0,0,0,0,0xf541d1a1,0xf541ceea
+tick,0xffffe402,0,0,0,0
 profiler,"end"
=======================================
--- /branches/bleeding_edge/tools/tickprocessor.js      Tue Jul  2 08:34:28 2013
+++ /branches/bleeding_edge/tools/tickprocessor.js      Wed Jul  3 09:20:59 2013
@@ -169,7 +169,7 @@
       'snapshot-pos': { parsers: [parseInt, parseInt],
           processor: this.processSnapshotPosition },
       'tick': {
-          parsers: [parseInt, parseInt, parseInt, parseInt,
+          parsers: [parseInt, parseInt, parseInt,
                     parseInt, parseInt, 'var-args'],
           processor: this.processTick },
       'heap-sample-begin': { parsers: [null, null, parseInt],
@@ -365,7 +365,6 @@
 };

 TickProcessor.prototype.processTick = function(pc,
-                                               sp,
                                                ns_since_start,
                                                is_external_callback,
                                                tos_or_external_callback,

--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to