* Use a custom, non-allocating map for frame ids * use memory_order_relaxed for the id of heap allocated handles * Added displayPresent time to FrameInfo To do this, we added support for queryFrameTiming() to the backend, as a synchronous API. Then FrameInfo uses it to update the corresponding history entry. displayPresent time can be used to detect "buffer stuffing", i.e. when the GPU gets too much ahead of the display. Currently the information is returned to the user only. Eventually filament will make use of it to determine if a frame skip is mandated. * API BREAK: rename frameTime to gpuFrameDuration * FrameInfo now contains compositor timings - the presentation deadline - the refresh rate from the display - the composition-display latency * set FrameInfo data to INVALID if feature is not supported report presentDeadline properly.
240 lines
8.0 KiB
CMake
240 lines
8.0 KiB
CMake
cmake_minimum_required(VERSION 3.19)
|
|
project(utils)
|
|
|
|
set(TARGET utils)
|
|
set(TARGET_LINUX ${TARGET}/linux)
|
|
set(TARGET_GENERIC ${TARGET}/generic)
|
|
set(PUBLIC_HDR_DIR include)
|
|
|
|
# ==================================================================================================
|
|
# Sources and headers
|
|
# ==================================================================================================
|
|
file(GLOB_RECURSE PUBLIC_HDRS ${PUBLIC_HDR_DIR}/${TARGET}/*.h)
|
|
|
|
set(DIST_HDRS
|
|
${PUBLIC_HDR_DIR}/${TARGET}/algorithm.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/bitset.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/CallStack.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/debug.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/Allocator.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/BitmaskEnum.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/compiler.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/compressed_pair.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/CString.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/ImmutableCString.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/Entity.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/EntityInstance.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/EntityManager.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/FixedCapacityVector.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/Hash.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/InternPool.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/Invocable.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/Log.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/Logger.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/memalign.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/MonotonicRingMap.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/Mutex.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/NameComponentManager.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/ostream.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/Panic.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/Path.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/PrivateImplementation.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/PrivateImplementation-impl.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/RefCountedMap.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/SingleInstanceComponentManager.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/Slice.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/StaticString.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/Status.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/StructureOfArrays.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/Systrace.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/sstream.h
|
|
${PUBLIC_HDR_DIR}/${TARGET}/unwindows.h
|
|
)
|
|
|
|
# Use our custom mutex/condition only on ANDROID
|
|
set(DIST_ANDROID_HDRS
|
|
${PUBLIC_HDR_DIR}/${TARGET_LINUX}/Mutex.h
|
|
)
|
|
|
|
set(DIST_GENERIC_HDRS
|
|
${PUBLIC_HDR_DIR}/${TARGET_GENERIC}/Mutex.h
|
|
)
|
|
|
|
set(SRCS
|
|
src/api_level.cpp
|
|
src/architecture.cpp
|
|
src/ashmem.cpp
|
|
src/debug.cpp
|
|
src/Allocator.cpp
|
|
src/AsyncJobQueue.cpp
|
|
src/CallStack.cpp
|
|
src/CString.cpp
|
|
src/CountDownLatch.cpp
|
|
src/CyclicBarrier.cpp
|
|
src/EntityManager.cpp
|
|
src/EntityManagerImpl.h
|
|
src/FixedCapacityVectorBase.cpp
|
|
src/ImmutableCString.cpp
|
|
src/Invocable.cpp
|
|
src/JobSystem.cpp
|
|
src/Log.cpp
|
|
src/NameComponentManager.cpp
|
|
src/ostream.cpp
|
|
src/Panic.cpp
|
|
src/Path.cpp
|
|
src/Profiler.cpp
|
|
src/sstream.cpp
|
|
src/string.cpp
|
|
src/ThreadUtils.cpp
|
|
src/Status.cpp
|
|
)
|
|
|
|
if (WIN32)
|
|
list(APPEND SRCS src/win32/Path.cpp)
|
|
endif()
|
|
if (ANDROID)
|
|
list(APPEND SRCS src/android/ThermalManager.cpp)
|
|
list(APPEND SRCS src/android/PerformanceHintManager.cpp)
|
|
list(APPEND SRCS src/android/Systrace.cpp)
|
|
if (FILAMENT_ENABLE_PERFETTO)
|
|
list(APPEND SRCS src/android/Tracing.cpp)
|
|
endif()
|
|
endif()
|
|
if (LINUX OR ANDROID)
|
|
list(APPEND SRCS src/linux/Condition.cpp)
|
|
list(APPEND SRCS src/linux/Mutex.cpp)
|
|
list(APPEND SRCS src/linux/Path.cpp)
|
|
endif()
|
|
if (APPLE)
|
|
list(APPEND SRCS src/darwin/Path.mm)
|
|
list(APPEND SRCS src/darwin/Systrace.cpp)
|
|
list(APPEND SRCS src/darwin/Tracing.cpp)
|
|
endif()
|
|
if (WEBGL)
|
|
list(APPEND SRCS src/web/Path.cpp)
|
|
endif()
|
|
|
|
# ==================================================================================================
|
|
# Includes and target definition
|
|
# ==================================================================================================
|
|
include_directories(${PUBLIC_HDR_DIR})
|
|
|
|
add_library(${TARGET} STATIC ${PUBLIC_HDRS} ${SRCS})
|
|
target_include_directories(${TARGET} PUBLIC ${PUBLIC_HDR_DIR})
|
|
set_target_properties(${TARGET} PROPERTIES FOLDER Libs)
|
|
target_link_libraries(${TARGET} PUBLIC tsl)
|
|
|
|
if (ANDROID)
|
|
target_link_libraries(${TARGET} PUBLIC log)
|
|
target_link_libraries(${TARGET} PRIVATE dl)
|
|
target_link_libraries(${TARGET} PUBLIC android)
|
|
if (FILAMENT_ENABLE_PERFETTO)
|
|
target_link_libraries(${TARGET} PUBLIC perfetto)
|
|
endif()
|
|
endif()
|
|
|
|
if (WIN32)
|
|
# Needed for shlwapi.h (GetModuleFileName)
|
|
target_link_libraries(${TARGET} PUBLIC Shlwapi)
|
|
endif()
|
|
|
|
if (APPLE)
|
|
# Needed for NSTemporaryDirectory()
|
|
target_link_libraries(${TARGET} PRIVATE "-framework Foundation")
|
|
endif()
|
|
|
|
if (LINUX)
|
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
|
find_package(Threads REQUIRED)
|
|
target_link_libraries(${TARGET} PRIVATE Threads::Threads)
|
|
target_link_libraries(${TARGET} PRIVATE dl)
|
|
endif()
|
|
|
|
# ==================================================================================================
|
|
# Installation
|
|
# ==================================================================================================
|
|
set(INSTALL_TYPE ARCHIVE)
|
|
install(TARGETS ${TARGET} ${INSTALL_TYPE} DESTINATION lib/${DIST_DIR})
|
|
install(FILES ${DIST_HDRS} DESTINATION include/${TARGET})
|
|
if (ANDROID)
|
|
install(FILES ${DIST_ANDROID_HDRS} DESTINATION include/${TARGET_LINUX})
|
|
else()
|
|
install(FILES ${DIST_GENERIC_HDRS} DESTINATION include/${TARGET_GENERIC})
|
|
endif()
|
|
|
|
# ==================================================================================================
|
|
# Test executables
|
|
# ==================================================================================================
|
|
|
|
set(TEST_SRCS
|
|
test/test_algorithm.cpp
|
|
test/test_Allocators.cpp
|
|
test/test_bitset.cpp
|
|
test/test_CountDownLatch.cpp
|
|
test/test_CString.cpp
|
|
test/test_ImmutableCString.cpp
|
|
test/test_CyclicBarrier.cpp
|
|
test/test_Entity.cpp
|
|
test/test_FixedCapacityVector.cpp
|
|
test/test_FixedCircularBuffer.cpp
|
|
test/test_Hash.cpp
|
|
test/test_InternPool.cpp
|
|
test/test_JobSystem.cpp
|
|
test/test_MonotonicRingMap.cpp
|
|
test/test_QuadTreeArray.cpp
|
|
test/test_RangeMap.cpp
|
|
test/test_RefCountedMap.cpp
|
|
test/test_Slice.cpp
|
|
test/test_StructureOfArrays.cpp
|
|
test/test_sstream.cpp
|
|
test/test_string.cpp
|
|
test/test_utils_main.cpp
|
|
test/test_Zip2Iterator.cpp
|
|
test/test_BinaryTreeArray.cpp
|
|
test/test_Status.cpp
|
|
)
|
|
|
|
if (WEBGL_PTHREADS)
|
|
target_compile_definitions(${TARGET} PUBLIC -DFILAMENT_WASM_THREADS)
|
|
endif()
|
|
|
|
# The Path tests are platform-specific
|
|
if (NOT WEBGL)
|
|
if (WIN32)
|
|
list(APPEND TEST_SRCS test/test_WinPath.cpp)
|
|
else()
|
|
list(APPEND TEST_SRCS test/test_Path.cpp)
|
|
endif()
|
|
endif()
|
|
|
|
add_executable(test_${TARGET} ${TEST_SRCS})
|
|
|
|
target_link_libraries(test_${TARGET} PRIVATE gtest utils tsl math)
|
|
set_target_properties(test_${TARGET} PROPERTIES FOLDER Tests)
|
|
|
|
# ==================================================================================================
|
|
# Benchmarks
|
|
# ==================================================================================================
|
|
|
|
if (NOT WEBGL)
|
|
|
|
add_library(benchmark_${TARGET}_callee SHARED benchmark/benchmark_callee.cpp)
|
|
set_target_properties(benchmark_${TARGET}_callee PROPERTIES FOLDER Benchmarks)
|
|
|
|
set(BENCHMARK_SRCS
|
|
benchmark/benchmark_allocators.cpp
|
|
benchmark/benchmark_binary_search.cpp
|
|
benchmark/benchmark_calls.cpp
|
|
benchmark/benchmark_JobSystem.cpp
|
|
benchmark/benchmark_mutex.cpp
|
|
benchmark/benchmark_memcpy.cpp)
|
|
|
|
|
|
add_executable(benchmark_${TARGET} ${BENCHMARK_SRCS})
|
|
|
|
target_link_libraries(benchmark_${TARGET} PRIVATE benchmark_main utils benchmark_${TARGET}_callee)
|
|
|
|
set_target_properties(benchmark_${TARGET} PROPERTIES FOLDER Benchmarks)
|
|
|
|
endif()
|