mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2024-12-14 02:24:03 +01:00
84f3ff2afd
As part of introducing the Chrome runtime we now need to distinguish between the classes that implement the current CEF runtime and the classes the implement the shared CEF library/runtime structure and public API. We choose the name Alloy for the current CEF runtime because it describes a combination of Chrome and other elements. Shared CEF library/runtime classes will continue to use the Cef prefix. Classes that implement the Alloy or Chrome runtime will use the Alloy or Chrome prefixes respectively. Classes that extend an existing Chrome-prefixed class will add the Cef or Alloy suffix, thereby following the existing naming pattern of Chrome-derived classes. This change applies the new naming pattern to an initial set of runtime-related classes. Additional classes/files will be renamed and moved as the Chrome runtime implementation progresses.
107 lines
5.0 KiB
C
107 lines
5.0 KiB
C
// Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
|
|
// reserved. Use of this source code is governed by a BSD-style license that
|
|
// can be found in the LICENSE file.
|
|
|
|
#ifndef CEF_LIBCEF_BROWSER_THREAD_UTIL_H_
|
|
#define CEF_LIBCEF_BROWSER_THREAD_UTIL_H_
|
|
#pragma once
|
|
|
|
#include "base/location.h"
|
|
#include "base/logging.h"
|
|
#include "base/task/post_task.h"
|
|
#include "base/threading/scoped_blocking_call.h"
|
|
#include "base/threading/thread_restrictions.h"
|
|
#include "content/public/browser/browser_task_traits.h"
|
|
#include "content/public/browser/browser_thread.h"
|
|
|
|
#define CEF_UIT content::BrowserThread::UI
|
|
#define CEF_IOT content::BrowserThread::IO
|
|
|
|
#define CEF_CURRENTLY_ON(id) content::BrowserThread::CurrentlyOn(id)
|
|
#define CEF_CURRENTLY_ON_UIT() CEF_CURRENTLY_ON(CEF_UIT)
|
|
#define CEF_CURRENTLY_ON_IOT() CEF_CURRENTLY_ON(CEF_IOT)
|
|
|
|
#define CEF_REQUIRE(id) DCHECK(CEF_CURRENTLY_ON(id))
|
|
#define CEF_REQUIRE_UIT() CEF_REQUIRE(CEF_UIT)
|
|
#define CEF_REQUIRE_IOT() CEF_REQUIRE(CEF_IOT)
|
|
|
|
#define CEF_REQUIRE_RETURN(id, var) \
|
|
if (!CEF_CURRENTLY_ON(id)) { \
|
|
NOTREACHED() << "called on invalid thread"; \
|
|
return var; \
|
|
}
|
|
#define CEF_REQUIRE_UIT_RETURN(var) CEF_REQUIRE_RETURN(CEF_UIT, var)
|
|
#define CEF_REQUIRE_IOT_RETURN(var) CEF_REQUIRE_RETURN(CEF_IOT, var)
|
|
|
|
#define CEF_REQUIRE_RETURN_VOID(id) \
|
|
if (!CEF_CURRENTLY_ON(id)) { \
|
|
NOTREACHED() << "called on invalid thread"; \
|
|
return; \
|
|
}
|
|
#define CEF_REQUIRE_UIT_RETURN_VOID() CEF_REQUIRE_RETURN_VOID(CEF_UIT)
|
|
#define CEF_REQUIRE_IOT_RETURN_VOID() CEF_REQUIRE_RETURN_VOID(CEF_IOT)
|
|
|
|
#define CEF_POST_TASK(id, task) base::PostTask(FROM_HERE, {id}, task)
|
|
#define CEF_POST_DELAYED_TASK(id, task, delay_ms) \
|
|
base::PostDelayedTask(FROM_HERE, {id}, task, \
|
|
base::TimeDelta::FromMilliseconds(delay_ms))
|
|
|
|
// Post a blocking task with the specified |priority|. Tasks that have not
|
|
// started executing at shutdown will never run. However, any task that has
|
|
// already begun executing when shutdown is invoked will be allowed to continue
|
|
// and will block shutdown until completion.
|
|
// Tasks posted with this method are not guaranteed to run sequentially. Use
|
|
// base::CreateSequencedTaskRunner instead if sequence is important.
|
|
// Sequenced runners at various priorities that always execute all pending tasks
|
|
// before shutdown are available via CefTaskRunnerManager and exposed by the CEF
|
|
// API.
|
|
#define CEF_POST_BLOCKING_TASK(priority, task) \
|
|
base::PostTask( \
|
|
FROM_HERE, \
|
|
{base::ThreadPool(), priority, \
|
|
base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN, base::MayBlock()}, \
|
|
task)
|
|
|
|
// Post a blocking task that affects UI or responsiveness of future user
|
|
// interactions. Do not use if an immediate response to a user interaction is
|
|
// expected.
|
|
#define CEF_POST_USER_VISIBLE_TASK(task) \
|
|
CEF_POST_BLOCKING_TASK(base::TaskPriority::USER_VISIBLE, task)
|
|
|
|
// Post a blocking task where the user won't notice if it takes an arbitrarily
|
|
// long time to complete.
|
|
#define CEF_POST_BACKGROUND_TASK(task) \
|
|
CEF_POST_BLOCKING_TASK(base::TaskPriority::BEST_EFFORT, task)
|
|
|
|
// Assert that blocking is allowed on the current thread.
|
|
#define CEF_REQUIRE_BLOCKING() \
|
|
base::ScopedBlockingCall scoped_blocking_call( \
|
|
FROM_HERE, base::BlockingType::WILL_BLOCK)
|
|
|
|
// Same as IMPLEMENT_REFCOUNTING() but using the specified Destructor.
|
|
#define IMPLEMENT_REFCOUNTING_EX(ClassName, Destructor) \
|
|
public: \
|
|
void AddRef() const OVERRIDE { ref_count_.AddRef(); } \
|
|
bool Release() const OVERRIDE { \
|
|
if (ref_count_.Release()) { \
|
|
Destructor::Destruct(this); \
|
|
return true; \
|
|
} \
|
|
return false; \
|
|
} \
|
|
bool HasOneRef() const OVERRIDE { return ref_count_.HasOneRef(); } \
|
|
bool HasAtLeastOneRef() const OVERRIDE { \
|
|
return ref_count_.HasAtLeastOneRef(); \
|
|
} \
|
|
\
|
|
private: \
|
|
CefRefCount ref_count_
|
|
|
|
#define IMPLEMENT_REFCOUNTING_DELETE_ON_UIT(ClassName) \
|
|
IMPLEMENT_REFCOUNTING_EX(ClassName, content::BrowserThread::DeleteOnUIThread)
|
|
|
|
#define IMPLEMENT_REFCOUNTING_DELETE_ON_IOT(ClassName) \
|
|
IMPLEMENT_REFCOUNTING_EX(ClassName, content::BrowserThread::DeleteOnIOThread)
|
|
|
|
#endif // CEF_LIBCEF_BROWSER_THREAD_UTIL_H_
|