From 625d76f832f11e0a64f5dd917432a9c76f23a6a6 Mon Sep 17 00:00:00 2001 From: Mikhail Pozdnyakov Date: Fri, 11 Oct 2019 20:49:16 +0300 Subject: [core] 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`. --- src/mbgl/actor/scheduler.cpp | 25 +++++++++++++++++++++---- 1 file 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 Scheduler::bindOnce(std::function fn) { - assert(fn); - return [scheduler = makeWeakPtr(), scheduled = std::move(fn)]() mutable { +namespace { + +class BindContext { +public: + BindContext(std::function scheduled_, mapbox::base::WeakPtr scheduler_) + : scheduled(std::move(scheduled_)), scheduler(std::move(scheduler_)) {} + + std::function scheduled; + mapbox::base::WeakPtr scheduler; + + void scheduleOnce() { if (!scheduled) return; // Repeated call. auto schedulerGuard = scheduler.lock(); if (scheduler) scheduler->schedule(std::move(scheduled)); - }; + assert(!scheduled); + } +}; + +} // namespace + +std::function Scheduler::bindOnce(std::function fn) { + assert(fn); + auto ctx = new BindContext(std::move(fn), makeWeakPtr()); + return [ctx]() { ctx->scheduleOnce(); }; } static auto& current() { -- cgit v1.2.1