blob: 244534ffbac79a2736747a8255b6f065ddaacfaf [file] [log] [blame]
James Robinsona9763132014-10-06 11:18:13 -07001// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "gin/public/v8_platform.h"
6
7#include "base/bind.h"
8#include "base/location.h"
James Robinson74f86ec2015-03-05 13:07:08 -08009#include "base/threading/thread.h"
James Robinsona9763132014-10-06 11:18:13 -070010#include "gin/per_isolate_data.h"
11
12namespace gin {
13
14namespace {
15
16base::LazyInstance<V8Platform>::Leaky g_v8_platform = LAZY_INSTANCE_INITIALIZER;
17
18} // namespace
19
20// static
21V8Platform* V8Platform::Get() { return g_v8_platform.Pointer(); }
22
23V8Platform::V8Platform() {}
24
25V8Platform::~V8Platform() {}
26
27void V8Platform::CallOnBackgroundThread(
28 v8::Task* task,
29 v8::Platform::ExpectedRuntime expected_runtime) {
James Robinson74f86ec2015-03-05 13:07:08 -080030 if (!background_thread_) {
31 background_thread_.reset(new base::Thread("gin_background"));
32 background_thread_->Start();
33 }
James Robinsonc4d0fb22016-01-28 14:31:21 -080034 background_thread_->task_runner()->PostTask(
35 FROM_HERE, base::Bind(&v8::Task::Run, base::Owned(task)));
James Robinsona9763132014-10-06 11:18:13 -070036}
37
38void V8Platform::CallOnForegroundThread(v8::Isolate* isolate, v8::Task* task) {
James Robinsonc4d0fb22016-01-28 14:31:21 -080039 PerIsolateData::From(isolate)->task_runner()->PostTask(
James Robinsona9763132014-10-06 11:18:13 -070040 FROM_HERE, base::Bind(&v8::Task::Run, base::Owned(task)));
41}
42
James Robinsonbaf71d32014-10-08 13:00:20 -070043double V8Platform::MonotonicallyIncreasingTime() {
44 return base::TimeTicks::Now().ToInternalValue() /
45 static_cast<double>(base::Time::kMicrosecondsPerSecond);
46}
47
James Robinsona9763132014-10-06 11:18:13 -070048} // namespace gin