Author: [email protected]
Date: Wed Apr 15 12:09:38 2009
New Revision: 1718

Modified:
    branches/bleeding_edge/src/debug.cc
    branches/bleeding_edge/test/cctest/test-debug.cc

Log:
Add debug command break flag for debugger host dispatch.

Ensure that debugger host dispatch is processed even though there are no  
debugger commands in the queue.
Review URL: http://codereview.chromium.org/67180

Modified: branches/bleeding_edge/src/debug.cc
==============================================================================
--- branches/bleeding_edge/src/debug.cc (original)
+++ branches/bleeding_edge/src/debug.cc Wed Apr 15 12:09:38 2009
@@ -1825,6 +1825,9 @@
          Debugger::host_dispatch_handler_(reinterpret_cast<void*>(dispatch),
                                            
Debugger::host_dispatch_handler_data_);
        }
+      if (auto_continue && !HasCommands()) {
+        return;
+      }
        continue;
      }

@@ -2030,6 +2033,8 @@
    Logger::DebugTag("Put command on command_queue.");
    command_queue_.Put(command_copy);
    command_received_->Signal();
+
+  // Set the debug command break flag to have the command processed.
    if (!Debug::InDebugger()) {
      StackGuard::DebugCommand();
    }
@@ -2042,7 +2047,7 @@


  void Debugger::ProcessHostDispatch(void* dispatch) {
-// Puts a host dispatch comming from the public API on the queue.
+  // Puts a host dispatch comming from the public API on the queue.
    uint16_t hack[3];
    hack[0] = 0;
    hack[1] = reinterpret_cast<uint32_t>(dispatch) >> 16;
@@ -2050,6 +2055,11 @@
    Logger::DebugTag("Put dispatch on command_queue.");
    command_queue_.Put(Vector<uint16_t>(hack, 3).Clone());
    command_received_->Signal();
+
+  // Set the debug command break flag to have the host dispatch processed.
+  if (!Debug::InDebugger()) {
+    StackGuard::DebugCommand();
+  }
  }



Modified: branches/bleeding_edge/test/cctest/test-debug.cc
==============================================================================
--- branches/bleeding_edge/test/cctest/test-debug.cc    (original)
+++ branches/bleeding_edge/test/cctest/test-debug.cc    Wed Apr 15 12:09:38  
2009
@@ -4025,19 +4025,33 @@
       "\"type\":\"request\","
       "\"command\":\"continue\"}";

+  // Create an empty function to call for processing debug commands
+  v8::Local<v8::Function> empty =
+      CompileFunction(&env, "function empty(){}", "empty");
+
    // Setup message and host dispatch handlers.
    v8::Debug::SetMessageHandler(DummyMessageHandler);
    v8::Debug::SetHostDispatchHandler(HostDispatchHandlerHitCount,
                                      NULL);

-  // Fill a host dispatch and a continue command on the command queue  
before
-  // running some code.
+  // Send a host dispatch by itself.
+  v8::Debug::SendHostDispatch(NULL);
+  empty->Call(env->Global(), 0, NULL);  // Run JavaScript to activate  
debugger.
+  CHECK_EQ(1, host_dispatch_hit_count);
+
+  // Fill a host dispatch and a continue command on the command queue.
    v8::Debug::SendHostDispatch(NULL);
    v8::Debug::SendCommand(buffer, AsciiToUtf16(command_continue, buffer));
-  CompileRun("void 0");
+  empty->Call(env->Global(), 0, NULL);  // Run JavaScript to activate  
debugger.

-  // The host dispatch callback should be called.
-  CHECK_EQ(1, host_dispatch_hit_count);
+  // Fill a continue command and a host dispatch on the command queue.
+  v8::Debug::SendCommand(buffer, AsciiToUtf16(command_continue, buffer));
+  v8::Debug::SendHostDispatch(NULL);
+  empty->Call(env->Global(), 0, NULL);  // Run JavaScript to activate  
debugger.
+  empty->Call(env->Global(), 0, NULL);  // Run JavaScript to activate  
debugger.
+
+  // All the host dispatch callback should be called.
+  CHECK_EQ(3, host_dispatch_hit_count);
  }



--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---

Reply via email to