forked from flutter/engine
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Import intrusively ref counted shared pointers into FML. (flutter#5062)
- Loading branch information
1 parent
cb3376c
commit 4691a0b
Showing
47 changed files
with
1,511 additions
and
86 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,110 @@ | ||
// Copyright 2016 The Fuchsia Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style license that can be | ||
// found in the LICENSE file. | ||
|
||
// This file adds defines about the platform we're currently building on. | ||
// Operating System: | ||
// OS_WIN / OS_MACOSX / OS_LINUX / OS_POSIX (MACOSX or LINUX) / | ||
// OS_NACL (NACL_SFI or NACL_NONSFI) / OS_NACL_SFI / OS_NACL_NONSFI | ||
// Compiler: | ||
// COMPILER_MSVC / COMPILER_GCC | ||
// Processor: | ||
// ARCH_CPU_X86 / ARCH_CPU_X86_64 / ARCH_CPU_X86_FAMILY (X86 or X86_64) | ||
// ARCH_CPU_32_BITS / ARCH_CPU_64_BITS | ||
|
||
#ifndef FLUTTER_FML_BUILD_CONFIG_H_ | ||
#define FLUTTER_FML_BUILD_CONFIG_H_ | ||
|
||
#if defined(__Fuchsia__) | ||
#define OS_FUCHSIA 1 | ||
#elif defined(ANDROID) | ||
#define OS_ANDROID 1 | ||
#elif defined(__APPLE__) | ||
// only include TargetConditions after testing ANDROID as some android builds | ||
// on mac don't have this header available and it's not needed unless the target | ||
// is really mac/ios. | ||
#include <TargetConditionals.h> | ||
#define OS_MACOSX 1 | ||
#if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE | ||
#define OS_IOS 1 | ||
#endif // defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE | ||
#elif defined(__linux__) | ||
#define OS_LINUX 1 | ||
// include a system header to pull in features.h for glibc/uclibc macros. | ||
#include <unistd.h> | ||
#if defined(__GLIBC__) && !defined(__UCLIBC__) | ||
// we really are using glibc, not uClibc pretending to be glibc | ||
#define LIBC_GLIBC 1 | ||
#endif | ||
#elif defined(_WIN32) | ||
#define OS_WIN 1 | ||
#elif defined(__FreeBSD__) | ||
#define OS_FREEBSD 1 | ||
#elif defined(__OpenBSD__) | ||
#define OS_OPENBSD 1 | ||
#elif defined(__sun) | ||
#define OS_SOLARIS 1 | ||
#elif defined(__QNXNTO__) | ||
#define OS_QNX 1 | ||
#else | ||
#error Please add support for your platform in flutter/fml/build_config.h | ||
#endif | ||
|
||
// For access to standard BSD features, use OS_BSD instead of a | ||
// more specific macro. | ||
#if defined(OS_FREEBSD) || defined(OS_OPENBSD) | ||
#define OS_BSD 1 | ||
#endif | ||
|
||
// For access to standard POSIXish features, use OS_POSIX instead of a | ||
// more specific macro. | ||
#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_FREEBSD) || \ | ||
defined(OS_OPENBSD) || defined(OS_SOLARIS) || defined(OS_ANDROID) || \ | ||
defined(OS_NACL) || defined(OS_QNX) | ||
#define OS_POSIX 1 | ||
#endif | ||
|
||
// Processor architecture detection. For more info on what's defined, see: | ||
// http://msdn.microsoft.com/en-us/library/b0084kay.aspx | ||
// http://www.agner.org/optimize/calling_conventions.pdf | ||
// or with gcc, run: "echo | gcc -E -dM -" | ||
#if defined(_M_X64) || defined(__x86_64__) | ||
#define ARCH_CPU_X86_FAMILY 1 | ||
#define ARCH_CPU_X86_64 1 | ||
#define ARCH_CPU_64_BITS 1 | ||
#define ARCH_CPU_LITTLE_ENDIAN 1 | ||
#elif defined(_M_IX86) || defined(__i386__) | ||
#define ARCH_CPU_X86_FAMILY 1 | ||
#define ARCH_CPU_X86 1 | ||
#define ARCH_CPU_32_BITS 1 | ||
#define ARCH_CPU_LITTLE_ENDIAN 1 | ||
#elif defined(__ARMEL__) | ||
#define ARCH_CPU_ARM_FAMILY 1 | ||
#define ARCH_CPU_ARMEL 1 | ||
#define ARCH_CPU_32_BITS 1 | ||
#define ARCH_CPU_LITTLE_ENDIAN 1 | ||
#elif defined(__aarch64__) | ||
#define ARCH_CPU_ARM_FAMILY 1 | ||
#define ARCH_CPU_ARM64 1 | ||
#define ARCH_CPU_64_BITS 1 | ||
#define ARCH_CPU_LITTLE_ENDIAN 1 | ||
#elif defined(__pnacl__) | ||
#define ARCH_CPU_32_BITS 1 | ||
#define ARCH_CPU_LITTLE_ENDIAN 1 | ||
#elif defined(__MIPSEL__) | ||
#if defined(__LP64__) | ||
#define ARCH_CPU_MIPS64_FAMILY 1 | ||
#define ARCH_CPU_MIPS64EL 1 | ||
#define ARCH_CPU_64_BITS 1 | ||
#define ARCH_CPU_LITTLE_ENDIAN 1 | ||
#else | ||
#define ARCH_CPU_MIPS_FAMILY 1 | ||
#define ARCH_CPU_MIPSEL 1 | ||
#define ARCH_CPU_32_BITS 1 | ||
#define ARCH_CPU_LITTLE_ENDIAN 1 | ||
#endif | ||
#else | ||
#error Please add support for your architecture in flutter/fml/build_config.h | ||
#endif | ||
|
||
#endif // FLUTTER_FML_BUILD_CONFIG_H_ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
// Copyright 2016 The Fuchsia 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 FLUTTER_FML_COMPILER_SPECIFIC_H_ | ||
#define FLUTTER_FML_COMPILER_SPECIFIC_H_ | ||
|
||
#if !defined(__GNUC__) && !defined(__clang__) && !defined(_MSC_VER) | ||
#error Unsupported compiler. | ||
#endif | ||
|
||
// Annotate a variable indicating it's ok if the variable is not used. | ||
// (Typically used to silence a compiler warning when the assignment | ||
// is important for some other reason.) | ||
// Use like: | ||
// int x = ...; | ||
// FML_ALLOW_UNUSED_LOCAL(x); | ||
#define FML_ALLOW_UNUSED_LOCAL(x) false ? (void)x : (void)0 | ||
|
||
// Annotate a typedef or function indicating it's ok if it's not used. | ||
// Use like: | ||
// typedef Foo Bar ALLOW_UNUSED_TYPE; | ||
#if defined(__GNUC__) || defined(__clang__) | ||
#define FML_ALLOW_UNUSED_TYPE __attribute__((unused)) | ||
#else | ||
#define FML_ALLOW_UNUSED_TYPE | ||
#endif | ||
|
||
// Annotate a function indicating it should not be inlined. | ||
// Use like: | ||
// NOINLINE void DoStuff() { ... } | ||
#if defined(__GNUC__) || defined(__clang__) | ||
#define FML_NOINLINE __attribute__((noinline)) | ||
#elif defined(_MSC_VER) | ||
#define FML_NOINLINE __declspec(noinline) | ||
#endif | ||
|
||
// Specify memory alignment for structs, classes, etc. | ||
// Use like: | ||
// class FML_ALIGNAS(16) MyClass { ... } | ||
// FML_ALIGNAS(16) int array[4]; | ||
#if defined(__GNUC__) || defined(__clang__) | ||
#define FML_ALIGNAS(byte_alignment) __attribute__((aligned(byte_alignment))) | ||
#elif defined(_MSC_VER) | ||
#define FML_ALIGNAS(byte_alignment) __declspec(align(byte_alignment)) | ||
#endif | ||
|
||
// Return the byte alignment of the given type (available at compile time). | ||
// Use like: | ||
// FML_ALIGNOF(int32) // this would be 4 | ||
#if defined(__GNUC__) || defined(__clang__) | ||
#define FML_ALIGNOF(type) __alignof__(type) | ||
#elif defined(_MSC_VER) | ||
#define FML_ALIGNOF(type) __alignof(type) | ||
#endif | ||
|
||
// Annotate a function indicating the caller must examine the return value. | ||
// Use like: | ||
// int foo() FML_WARN_UNUSED_RESULT; | ||
// To explicitly ignore a result, see |ignore_result()| in base/macros.h. | ||
#if defined(__GNUC__) || defined(__clang__) | ||
#define FML_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) | ||
#else | ||
#define FML_WARN_UNUSED_RESULT | ||
#endif | ||
|
||
// Tell the compiler a function is using a printf-style format string. | ||
// |format_param| is the one-based index of the format string parameter; | ||
// |dots_param| is the one-based index of the "..." parameter. | ||
// For v*printf functions (which take a va_list), pass 0 for dots_param. | ||
// (This is undocumented but matches what the system C headers do.) | ||
#if defined(__GNUC__) || defined(__clang__) | ||
#define FML_PRINTF_FORMAT(format_param, dots_param) \ | ||
__attribute__((format(printf, format_param, dots_param))) | ||
#else | ||
#define FML_PRINTF_FORMAT(format_param, dots_param) | ||
#endif | ||
|
||
#endif // FLUTTER_FML_COMPILER_SPECIFIC_H_ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
// Copyright 2016 The Fuchsia 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 FLUTTER_FML_EINTR_WRAPPER_H_ | ||
#define FLUTTER_FML_EINTR_WRAPPER_H_ | ||
|
||
#include "flutter/fml/build_config.h" | ||
|
||
#include <errno.h> | ||
|
||
#if defined(OS_WIN) | ||
|
||
// Windows has no concept of EINTR. | ||
#define FML_HANDLE_EINTR(x) (x) | ||
#define FML_IGNORE_EINTR(x) (x) | ||
|
||
#else | ||
|
||
#if defined(NDEBUG) | ||
|
||
#define FML_HANDLE_EINTR(x) \ | ||
({ \ | ||
decltype(x) eintr_wrapper_result; \ | ||
do { \ | ||
eintr_wrapper_result = (x); \ | ||
} while (eintr_wrapper_result == -1 && errno == EINTR); \ | ||
eintr_wrapper_result; \ | ||
}) | ||
|
||
#else | ||
|
||
#define FML_HANDLE_EINTR(x) \ | ||
({ \ | ||
int eintr_wrapper_counter = 0; \ | ||
decltype(x) eintr_wrapper_result; \ | ||
do { \ | ||
eintr_wrapper_result = (x); \ | ||
} while (eintr_wrapper_result == -1 && errno == EINTR && \ | ||
eintr_wrapper_counter++ < 100); \ | ||
eintr_wrapper_result; \ | ||
}) | ||
|
||
#endif // NDEBUG | ||
|
||
#define FML_IGNORE_EINTR(x) \ | ||
({ \ | ||
decltype(x) eintr_wrapper_result; \ | ||
do { \ | ||
eintr_wrapper_result = (x); \ | ||
if (eintr_wrapper_result == -1 && errno == EINTR) { \ | ||
eintr_wrapper_result = 0; \ | ||
} \ | ||
} while (0); \ | ||
eintr_wrapper_result; \ | ||
}) | ||
|
||
#endif // defined(OS_WIN) | ||
|
||
#endif // FLUTTER_FML_EINTR_WRAPPER_H_ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.