Version 2.2.1
Debugger improvements.
Fixed minor bugs.

git-svn-id: http://v8.googlecode.com/svn/trunk@4346 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
diff --git a/src/platform-win32.cc b/src/platform-win32.cc
index 48f306d..9b09aa3 100644
--- a/src/platform-win32.cc
+++ b/src/platform-win32.cc
@@ -1803,37 +1803,48 @@
     // Context used for sampling the register state of the profiled thread.
     CONTEXT context;
     memset(&context, 0, sizeof(context));
-    // Loop until the sampler is disengaged.
-    while (sampler_->IsActive()) {
-      TickSample sample;
+    // Loop until the sampler is disengaged, keeping the specified samling freq.
+    for ( ; sampler_->IsActive(); Sleep(sampler_->interval_)) {
+#ifdef ENABLE_CPP_PROFILES_PROCESSOR
+      if (Logger::state() == GC) continue;
+
+      TickSample* sample = NULL;
+#else
+      TickSample sample_obj;
+      TickSample* sample = &sample_obj;
 
       // We always sample the VM state.
-      sample.state = Logger::state();
+      sample->state = Logger::state();
+#endif  // ENABLE_CPP_PROFILES_PROCESSOR
 
       // If profiling, we record the pc and sp of the profiled thread.
       if (sampler_->IsProfiling()
           && SuspendThread(profiled_thread_) != (DWORD)-1) {
         context.ContextFlags = CONTEXT_FULL;
         if (GetThreadContext(profiled_thread_, &context) != 0) {
-#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);
-#else
-          sample.pc = reinterpret_cast<Address>(context.Eip);
-          sample.sp = reinterpret_cast<Address>(context.Esp);
-          sample.fp = reinterpret_cast<Address>(context.Ebp);
+#ifdef ENABLE_CPP_PROFILES_PROCESSOR
+          sample = CpuProfiler::TickSampleEvent();
 #endif
-          sampler_->SampleStack(&sample);
+          if (sample != NULL) {
+#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);
+#else
+            sample->pc = reinterpret_cast<Address>(context.Eip);
+            sample->sp = reinterpret_cast<Address>(context.Esp);
+            sample->fp = reinterpret_cast<Address>(context.Ebp);
+#endif
+            sampler_->SampleStack(sample);
+          }
         }
         ResumeThread(profiled_thread_);
       }
 
+#ifndef ENABLE_CPP_PROFILES_PROCESSOR
       // Invoke tick handler with program counter and stack pointer.
-      sampler_->Tick(&sample);
-
-      // Wait until next sampling.
-      Sleep(sampler_->interval_);
+      sampler_->Tick(sample);
+#endif
     }
   }
 };