summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2019-10-11 20:49:16 +0300
committerMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2019-10-11 20:52:05 +0300
commit625d76f832f11e0a64f5dd917432a9c76f23a6a6 (patch)
tree28d06ef9878eb8d75d9c379979fbd8883591282f
parent2fb1e47b75c038f226397df7b790ba699b6e2dc8 (diff)
downloadqtlocation-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.cpp25
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() {