Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1083)

Unified Diff: content/test/browser_test_message_pump_android.cc

Issue 12213021: Android content_browsertests: Allow processing java tasks in nested mode. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/test/browser_test_message_pump_android.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/test/browser_test_message_pump_android.cc
diff --git a/content/test/browser_test_message_pump_android.cc b/content/test/browser_test_message_pump_android.cc
index 7d46058d62abbade6914decc7e189adc3d3a1ca3..b20b491cc22c69d3048438affab4d178c6f36997 100644
--- a/content/test/browser_test_message_pump_android.cc
+++ b/content/test/browser_test_message_pump_android.cc
@@ -4,9 +4,21 @@
#include "content/test/browser_test_message_pump_android.h"
+#include "base/android/jni_android.h"
+#include "base/android/scoped_java_ref.h"
+#include "base/lazy_instance.h"
#include "base/logging.h"
#include "base/synchronization/waitable_event.h"
#include "base/time.h"
+#include "jni/BrowserTestSystemMessageHandler_jni.h"
+
+namespace {
+
+base::LazyInstance<base::android::ScopedJavaGlobalRef<jobject> >
+ g_message_handler_obj = LAZY_INSTANCE_INITIALIZER;
+
+} // namespace
+
namespace content {
@@ -46,6 +58,14 @@ void BrowserTestMessagePumpAndroid::Run(Delegate* delegate) {
state_ = &state;
DCHECK(state_->run_depth <= 1) << "Only one level nested loops supported";
+ JNIEnv* env = base::android::AttachCurrentThread();
+ DCHECK(env);
+
+ // Need to cap the wait time to allow task processing on the java
+ // side. Otherwise, a long wait time on the native will starve java
+ // tasks.
+ base::TimeDelta max_delay = base::TimeDelta::FromMilliseconds(100);
+
for (;;) {
if (state_->should_quit)
break;
@@ -69,11 +89,20 @@ void BrowserTestMessagePumpAndroid::Run(Delegate* delegate) {
if (did_work)
continue;
+ // No native tasks to process right now. Process tasks from the Java
+ // System message handler. This will return when the java message queue
+ // is idle.
+ bool ret = Java_BrowserTestSystemMessageHandler_runNestedLoopTillIdle(env,
+ g_message_handler_obj.Get().obj());
+ CHECK(ret) << "Error running java message loop, tests will likely fail.";
+
if (state_->delayed_work_time.is_null()) {
- state_->waitable_event.Wait();
+ state_->waitable_event.TimedWait(max_delay);
} else {
base::TimeDelta delay =
state_->delayed_work_time - base::TimeTicks::Now();
+ if (delay > max_delay)
+ delay = max_delay;
if (delay > base::TimeDelta()) {
state_->waitable_event.TimedWait(delay);
} else {
@@ -87,13 +116,22 @@ void BrowserTestMessagePumpAndroid::Run(Delegate* delegate) {
state_ = previous_state;
}
+void BrowserTestMessagePumpAndroid::Start(
+ base::MessagePump::Delegate* delegate) {
+ JNIEnv* env = base::android::AttachCurrentThread();
+ DCHECK(env);
+ g_message_handler_obj.Get().Reset(
+ Java_BrowserTestSystemMessageHandler_create(env));
+
+ base::MessagePumpForUI::Start(delegate);
+}
+
void BrowserTestMessagePumpAndroid::Quit() {
if (state_) {
state_->should_quit = true;
state_->waitable_event.Signal();
return;
}
-
base::MessagePumpForUI::Quit();
}
@@ -119,4 +157,9 @@ void BrowserTestMessagePumpAndroid::ScheduleDelayedWork(
base::MessagePumpForUI::ScheduleDelayedWork(delayed_work_time);
}
-} // namespace base
+// static
+bool BrowserTestMessagePumpAndroid::RegisterJni(JNIEnv* env) {
+ return RegisterNativesImpl(env);
+}
+
+} // namespace content
« no previous file with comments | « content/test/browser_test_message_pump_android.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698