0
Files
src/content/renderer/in_process_renderer_thread.cc
kdillon 7543416ee7 [scheduler] Initialize WTF before creating the MainThreadScheduler.
Creating objects USING_FAST_MALLOC in the MTS fail due to WTF being allocated and initialized after the main thread. This CL ensures that that happens before the MT is created fixing issues like crbug.com/584196.

Bug: 1058645
Change-Id: I6c53e7b5cd48532c2e5ff0d3313e911a5ef4fc6d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2103787
Commit-Queue: Katie Dillon <kdillon@chromium.org>
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Reviewed-by: Scott Haseley <shaseley@chromium.org>
Cr-Commit-Position: refs/heads/master@{#761573}
2020-04-22 19:21:54 +00:00

76 lines
3.0 KiB
C++

// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/renderer/in_process_renderer_thread.h"
#include "build/build_config.h"
#include "content/renderer/render_process.h"
#include "content/renderer/render_process_impl.h"
#include "content/renderer/render_thread_impl.h"
#include "third_party/blink/public/platform/platform.h"
#include "third_party/blink/public/platform/scheduler/web_thread_scheduler.h"
#if defined(OS_ANDROID)
#include "base/android/jni_android.h"
#endif
namespace content {
InProcessRendererThread::InProcessRendererThread(
const InProcessChildThreadParams& params,
int32_t renderer_client_id)
: Thread("Chrome_InProcRendererThread"),
params_(params),
renderer_client_id_(renderer_client_id) {}
InProcessRendererThread::~InProcessRendererThread() {
Stop();
}
void InProcessRendererThread::Init() {
// Call AttachCurrentThreadWithName, before any other AttachCurrentThread()
// calls. The latter causes Java VM to assign Thread-??? to the thread name.
// Please note calls to AttachCurrentThreadWithName after AttachCurrentThread
// will not change the thread name kept in Java VM.
#if defined(OS_ANDROID)
base::android::AttachCurrentThreadWithName(thread_name());
// Make sure we aren't somehow reinitialising the inprocess renderer thread on
// Android. Temporary CHECK() to debug http://crbug.com/514141
CHECK(!render_process_);
#endif
blink::Platform::InitializeBlink();
std::unique_ptr<blink::scheduler::WebThreadScheduler> main_thread_scheduler =
blink::scheduler::WebThreadScheduler::CreateMainThreadScheduler();
render_process_ = RenderProcessImpl::Create();
// RenderThreadImpl doesn't currently support a proper shutdown sequence
// and it's okay when we're running in multi-process mode because renderers
// get killed by the OS. In-process mode is used for test and debug only.
new RenderThreadImpl(params_, renderer_client_id_,
std::move(main_thread_scheduler));
}
void InProcessRendererThread::CleanUp() {
render_process_.reset();
// It's a little lame to manually set this flag. But the single process
// RendererThread will receive the WM_QUIT. We don't need to assert on
// this thread, so just force the flag manually.
// If we want to avoid this, we could create the InProcRendererThread
// directly with _beginthreadex() rather than using the Thread class.
// We used to set this flag in the Init function above. However there
// other threads like WebThread which are created by this thread
// which resets this flag. Please see Thread::StartWithOptions. Setting
// this flag to true in Cleanup works around these problems.
SetThreadWasQuitProperly(true);
}
base::Thread* CreateInProcessRendererThread(
const InProcessChildThreadParams& params,
int32_t renderer_client_id) {
return new InProcessRendererThread(params, renderer_client_id);
}
} // namespace content