summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThiago Marcos P. Santos <tmpsantos@gmail.com>2020-04-20 16:37:24 +0300
committerThiago Marcos P. Santos <tmpsantos@gmail.com>2020-04-20 19:03:46 +0300
commitee1d700a9bc764c86502978b5538df44aaa66905 (patch)
treeeee57715e5963a0057ce77ae44143615c3257f93
parent71ce52d35f8421c89f6112b83061613937b2836c (diff)
downloadqtlocation-mapboxgl-ee1d700a9bc764c86502978b5538df44aaa66905.tar.gz
[core] Add platform abstractions for utils::now()
Some platforms might require special permissions or custom APIs to access the current time of the day.
-rw-r--r--include/mbgl/platform/time.hpp13
-rw-r--r--include/mbgl/util/chrono.hpp4
-rw-r--r--platform/android/android.cmake1
-rw-r--r--platform/default/src/mbgl/platform/time.cpp11
-rw-r--r--platform/ios/ios.cmake1
-rw-r--r--platform/linux/linux.cmake1
-rw-r--r--platform/macos/macos.cmake1
-rw-r--r--platform/qt/qt.cmake1
-rw-r--r--src/mbgl/util/http_header.cpp3
9 files changed, 34 insertions, 2 deletions
diff --git a/include/mbgl/platform/time.hpp b/include/mbgl/platform/time.hpp
new file mode 100644
index 0000000000..8769524514
--- /dev/null
+++ b/include/mbgl/platform/time.hpp
@@ -0,0 +1,13 @@
+#pragma once
+
+#include <chrono>
+
+namespace mbgl {
+namespace platform {
+
+// Returns the current time. Abstracted because some platforms
+// will not allow direct access to the current time via syscall.
+std::chrono::time_point<std::chrono::system_clock, std::chrono::seconds> now();
+
+} // namespace platform
+} // namespace mbgl
diff --git a/include/mbgl/util/chrono.hpp b/include/mbgl/util/chrono.hpp
index 4de3c2d3a2..d736b4f826 100644
--- a/include/mbgl/util/chrono.hpp
+++ b/include/mbgl/util/chrono.hpp
@@ -1,5 +1,7 @@
#pragma once
+#include <mbgl/platform/time.hpp>
+
#include <chrono>
#include <string>
@@ -19,7 +21,7 @@ using Timestamp = std::chrono::time_point<std::chrono::system_clock, Seconds>;
namespace util {
inline Timestamp now() {
- return std::chrono::time_point_cast<Seconds>(std::chrono::system_clock::now());
+ return platform::now();
}
// Returns the RFC1123 formatted date. E.g. "Tue, 04 Nov 2014 02:13:24 GMT"
diff --git a/platform/android/android.cmake b/platform/android/android.cmake
index fd6d9e7348..6547496bce 100644
--- a/platform/android/android.cmake
+++ b/platform/android/android.cmake
@@ -50,6 +50,7 @@ target_sources(
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/gfx/headless_frontend.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/gl/headless_backend.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/map/map_snapshotter.cpp
+ ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/platform/time.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/asset_file_source.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/database_file_source.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/file_source_manager.cpp
diff --git a/platform/default/src/mbgl/platform/time.cpp b/platform/default/src/mbgl/platform/time.cpp
new file mode 100644
index 0000000000..647464bb91
--- /dev/null
+++ b/platform/default/src/mbgl/platform/time.cpp
@@ -0,0 +1,11 @@
+#include <chrono>
+
+namespace mbgl {
+namespace platform {
+
+std::chrono::time_point<std::chrono::system_clock, std::chrono::seconds> now() {
+ return std::chrono::time_point_cast<std::chrono::seconds>(std::chrono::system_clock::now());
+}
+
+} // namespace platform
+} // namespace mbgl
diff --git a/platform/ios/ios.cmake b/platform/ios/ios.cmake
index 984b15840f..cab63e2824 100644
--- a/platform/ios/ios.cmake
+++ b/platform/ios/ios.cmake
@@ -49,6 +49,7 @@ target_sources(
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/gfx/headless_frontend.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/layermanager/layer_manager.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/map/map_snapshotter.cpp
+ ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/platform/time.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/asset_file_source.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/database_file_source.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/file_source_manager.cpp
diff --git a/platform/linux/linux.cmake b/platform/linux/linux.cmake
index 7412b09f8a..47395df7c6 100644
--- a/platform/linux/linux.cmake
+++ b/platform/linux/linux.cmake
@@ -18,6 +18,7 @@ target_sources(
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/i18n/collator.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/i18n/number_format.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/layermanager/layer_manager.cpp
+ ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/platform/time.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/asset_file_source.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/database_file_source.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/file_source_manager.cpp
diff --git a/platform/macos/macos.cmake b/platform/macos/macos.cmake
index a0eb3eae55..38c6e41a01 100644
--- a/platform/macos/macos.cmake
+++ b/platform/macos/macos.cmake
@@ -42,6 +42,7 @@ target_sources(
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/gfx/headless_frontend.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/layermanager/layer_manager.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/map/map_snapshotter.cpp
+ ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/platform/time.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/asset_file_source.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/database_file_source.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/file_source_manager.cpp
diff --git a/platform/qt/qt.cmake b/platform/qt/qt.cmake
index a7d209a077..fdb26e5308 100644
--- a/platform/qt/qt.cmake
+++ b/platform/qt/qt.cmake
@@ -31,6 +31,7 @@ target_sources(
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/gl/headless_backend.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/i18n/collator.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/layermanager/layer_manager.cpp
+ ${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/platform/time.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/asset_file_source.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/database_file_source.cpp
${PROJECT_SOURCE_DIR}/platform/default/src/mbgl/storage/file_source_manager.cpp
diff --git a/src/mbgl/util/http_header.cpp b/src/mbgl/util/http_header.cpp
index cdb4759d51..9777a2c806 100644
--- a/src/mbgl/util/http_header.cpp
+++ b/src/mbgl/util/http_header.cpp
@@ -1,5 +1,6 @@
#include <mbgl/util/http_header.hpp>
+#include <mbgl/util/chrono.hpp>
#include <mbgl/util/string.hpp>
#include <boost/spirit/include/qi.hpp>
@@ -31,7 +32,7 @@ optional<Timestamp> parseRetryHeaders(const optional<std::string>& retryAfter,
if (retryAfter) {
try {
auto secs = std::chrono::seconds(std::stoi(*retryAfter));
- return std::chrono::time_point_cast<Seconds>(std::chrono::system_clock::now() + secs);
+ return std::chrono::time_point_cast<Seconds>(util::now() + secs);
} catch (...) {
return util::parseTimestamp((*retryAfter).c_str());
}