diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-10-11 20:49:16 +0300 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-10-11 20:52:05 +0300 |
commit | 625d76f832f11e0a64f5dd917432a9c76f23a6a6 (patch) | |
tree | 28d06ef9878eb8d75d9c379979fbd8883591282f | |
parent | 2fb1e47b75c038f226397df7b790ba699b6e2dc8 (diff) | |
download | qtlocation-mapboxgl-upstream/mikhail_fix_binary_size_bloat.tar.gz |
[core] Fix binary size bloatupstream/mikhail_fix_binary_size_bloat
Heavy lambda captured parameters lead to a significant binary size increase on Android V8.
This commit shaves 64Kb from `libmapbox-gl.so`.
-rw-r--r-- | src/mbgl/actor/scheduler.cpp | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/src/mbgl/actor/scheduler.cpp b/src/mbgl/actor/scheduler.cpp index 81e259fe1f..d84bad9091 100644 --- a/src/mbgl/actor/scheduler.cpp +++ b/src/mbgl/actor/scheduler.cpp @@ -4,13 +4,30 @@ namespace mbgl { -std::function<void()> Scheduler::bindOnce(std::function<void()> fn) { - assert(fn); - return [scheduler = makeWeakPtr(), scheduled = std::move(fn)]() mutable { +namespace { + +class BindContext { +public: + BindContext(std::function<void()> scheduled_, mapbox::base::WeakPtr<Scheduler> scheduler_) + : scheduled(std::move(scheduled_)), scheduler(std::move(scheduler_)) {} + + std::function<void()> scheduled; + mapbox::base::WeakPtr<Scheduler> scheduler; + + void scheduleOnce() { if (!scheduled) return; // Repeated call. auto schedulerGuard = scheduler.lock(); if (scheduler) scheduler->schedule(std::move(scheduled)); - }; + assert(!scheduled); + } +}; + +} // namespace + +std::function<void()> Scheduler::bindOnce(std::function<void()> fn) { + assert(fn); + auto ctx = new BindContext(std::move(fn), makeWeakPtr()); + return [ctx]() { ctx->scheduleOnce(); }; } static auto& current() { |