Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorr.kuznetsov <r.kuznetsov@corp.mail.ru>2017-11-09 15:42:23 +0300
committerVlad Mihaylenko <vxmihaylenko@gmail.com>2017-11-14 11:18:31 +0300
commitebbdd625ceecf12f4f9386aec821795365b13104 (patch)
tree3cab866849d54fbc545cca6c5e42190d10e2380b
parent6e9b384489e89ef9c8428710a1d9913de06f18df (diff)
Review fixes
-rw-r--r--android/jni/com/mapswithme/maps/Framework.cpp1
-rw-r--r--android/jni/com/mapswithme/maps/SearchEngine.cpp6
-rw-r--r--android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp11
-rw-r--r--android/jni/com/mapswithme/platform/Platform.cpp7
-rw-r--r--android/jni/com/mapswithme/platform/Platform.hpp2
-rw-r--r--android/src/com/mapswithme/maps/MwmActivity.java8
-rw-r--r--android/src/com/mapswithme/maps/bookmarks/data/BookmarkManager.java24
-rw-r--r--base/worker_thread.hpp4
-rw-r--r--editor/user_stats.cpp4
-rw-r--r--iphone/Maps/Core/Framework/Framework.cpp6
-rw-r--r--iphone/Maps/Core/Framework/MWMFrameworkListener.mm7
-rw-r--r--map/benchmark_tools.cpp2
-rw-r--r--map/bookmark.cpp15
-rw-r--r--map/bookmark.hpp14
-rw-r--r--map/bookmark_manager.cpp50
-rw-r--r--map/bookmark_manager.hpp4
-rw-r--r--map/framework.cpp17
-rw-r--r--map/local_ads_manager.cpp6
-rw-r--r--map/routing_manager.cpp2
-rw-r--r--map/routing_manager.hpp12
-rw-r--r--map/search_mark.cpp2
-rw-r--r--map/traffic_manager.cpp6
-rw-r--r--partners_api/booking_api.cpp6
-rw-r--r--partners_api/cian_api.cpp2
-rw-r--r--partners_api/locals_api.cpp4
-rw-r--r--partners_api/uber_api.cpp4
-rw-r--r--partners_api/viator_api.cpp2
-rw-r--r--partners_api/yandex_api.cpp2
-rw-r--r--platform/platform.hpp66
-rw-r--r--platform/platform_android.cpp23
-rw-r--r--platform/platform_ios.mm19
-rw-r--r--platform/platform_mac.mm22
-rw-r--r--platform/platform_qt.cpp5
-rw-r--r--platform/platform_tizen.cpp6
-rw-r--r--platform/platform_win.cpp6
-rw-r--r--platform/safe_callback.hpp2
-rw-r--r--qt/search_panel.cpp3
-rw-r--r--search/search_quality/assessment_tool/main_model.cpp4
-rw-r--r--storage/diff_scheme/diff_manager.cpp2
-rw-r--r--storage/downloading_policy.cpp2
-rw-r--r--storage/storage.cpp2
41 files changed, 156 insertions, 236 deletions
diff --git a/android/jni/com/mapswithme/maps/Framework.cpp b/android/jni/com/mapswithme/maps/Framework.cpp
index 6a2ff91add..c4975bf104 100644
--- a/android/jni/com/mapswithme/maps/Framework.cpp
+++ b/android/jni/com/mapswithme/maps/Framework.cpp
@@ -159,7 +159,6 @@ bool Framework::CreateDrapeEngine(JNIEnv * env, jobject jSurface, int densityDpi
ASSERT(!m_guiPositions.empty(), ("GUI elements must be set-up before engine is created"));
p.m_widgetsInitInfo = m_guiPositions;
- m_work.LoadBookmarks();
m_work.SetMyPositionModeListener(bind(&Framework::MyPositionModeChanged, this, _1, _2));
m_work.CreateDrapeEngine(make_ref(m_contextFactory), move(p));
diff --git a/android/jni/com/mapswithme/maps/SearchEngine.cpp b/android/jni/com/mapswithme/maps/SearchEngine.cpp
index 0efbc23558..10a624a698 100644
--- a/android/jni/com/mapswithme/maps/SearchEngine.cpp
+++ b/android/jni/com/mapswithme/maps/SearchEngine.cpp
@@ -493,7 +493,7 @@ extern "C"
JNIEXPORT void JNICALL
Java_com_mapswithme_maps_search_SearchEngine_nativeCancelInteractiveSearch(JNIEnv * env, jclass clazz)
{
- GetPlatform().RunOnGuiThread([]()
+ GetPlatform().RunTask(Platform::Thread::Gui, []()
{
g_framework->NativeFramework()->CancelSearch(search::Mode::Viewport);
});
@@ -502,7 +502,7 @@ extern "C"
JNIEXPORT void JNICALL
Java_com_mapswithme_maps_search_SearchEngine_nativeCancelEverywhereSearch(JNIEnv * env, jclass clazz)
{
- GetPlatform().RunOnGuiThread([]()
+ GetPlatform().RunTask(Platform::Thread::Gui, []()
{
g_framework->NativeFramework()->CancelSearch(search::Mode::Everywhere);
});
@@ -511,7 +511,7 @@ extern "C"
JNIEXPORT void JNICALL
Java_com_mapswithme_maps_search_SearchEngine_nativeCancelAllSearches(JNIEnv * env, jclass clazz)
{
- GetPlatform().RunOnGuiThread([]()
+ GetPlatform().RunTask(Platform::Thread::Gui, []()
{
g_framework->NativeFramework()->CancelAllSearches();
});
diff --git a/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp b/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp
index 97c7b714fc..018f9dfbcd 100644
--- a/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp
+++ b/android/jni/com/mapswithme/maps/bookmarks/data/BookmarkManager.cpp
@@ -19,7 +19,7 @@ jclass g_bookmarkManagerClass;
jfieldID g_bookmarkManagerInstanceField;
jmethodID g_onBookmarksLoadingStartedMethod;
jmethodID g_onBookmarksLoadingFinishedMethod;
-jmethodID g_onBookmarksLoadingFileMethod;
+jmethodID g_onBookmarksFileLoadedMethod;
void PrepareClassRefs(JNIEnv * env)
{
@@ -37,15 +37,14 @@ void PrepareClassRefs(JNIEnv * env)
jni::GetMethodID(env, bookmarkManagerInstance, "onBookmarksLoadingStarted", "()V");
g_onBookmarksLoadingFinishedMethod =
jni::GetMethodID(env, bookmarkManagerInstance, "onBookmarksLoadingFinished", "()V");
- g_onBookmarksLoadingFileMethod =
- jni::GetMethodID(env, bookmarkManagerInstance, "onBookmarksLoadingFile",
+ g_onBookmarksFileLoadedMethod =
+ jni::GetMethodID(env, bookmarkManagerInstance, "onBookmarksFileLoaded",
"(ZLjava/lang/String;Z)V");
}
void OnAsyncLoadingStarted(JNIEnv * env)
{
ASSERT(g_bookmarkManagerClass != nullptr, ());
- LOG(LINFO, ("!!!!!!"));
jobject bookmarkManagerInstance = env->GetStaticObjectField(g_bookmarkManagerClass,
g_bookmarkManagerInstanceField);
env->CallVoidMethod(bookmarkManagerInstance, g_onBookmarksLoadingStartedMethod);
@@ -67,7 +66,7 @@ void OnAsyncLoadingFileSuccess(JNIEnv * env, std::string const & fileName, bool
jobject bookmarkManagerInstance = env->GetStaticObjectField(g_bookmarkManagerClass,
g_bookmarkManagerInstanceField);
jni::TScopedLocalRef jFileName(env, jni::ToJavaString(env, fileName));
- env->CallVoidMethod(bookmarkManagerInstance, g_onBookmarksLoadingFileMethod,
+ env->CallVoidMethod(bookmarkManagerInstance, g_onBookmarksFileLoadedMethod,
true /* success */, jFileName.get(), isTemporaryFile);
jni::HandleJavaException(env);
}
@@ -78,7 +77,7 @@ void OnAsyncLoadingFileError(JNIEnv * env, std::string const & fileName, bool is
jobject bookmarkManagerInstance = env->GetStaticObjectField(g_bookmarkManagerClass,
g_bookmarkManagerInstanceField);
jni::TScopedLocalRef jFileName(env, jni::ToJavaString(env, fileName));
- env->CallVoidMethod(bookmarkManagerInstance, g_onBookmarksLoadingFileMethod,
+ env->CallVoidMethod(bookmarkManagerInstance, g_onBookmarksFileLoadedMethod,
false /* success */, jFileName.get(), isTemporaryFile);
jni::HandleJavaException(env);
}
diff --git a/android/jni/com/mapswithme/platform/Platform.cpp b/android/jni/com/mapswithme/platform/Platform.cpp
index 8fab7b2260..1b63887c7c 100644
--- a/android/jni/com/mapswithme/platform/Platform.cpp
+++ b/android/jni/com/mapswithme/platform/Platform.cpp
@@ -147,13 +147,6 @@ Platform::~Platform()
env->DeleteGlobalRef(m_functorProcessObject);
}
-void Platform::ProcessFunctor(jlong functionPointer)
-{
- TFunctor * fn = reinterpret_cast<TFunctor *>(functionPointer);
- (*fn)();
- delete fn;
-}
-
void Platform::OnExternalStorageStatusChanged(bool isAvailable)
{
}
diff --git a/android/jni/com/mapswithme/platform/Platform.hpp b/android/jni/com/mapswithme/platform/Platform.hpp
index 5c9cf05427..3d8cad3cf9 100644
--- a/android/jni/com/mapswithme/platform/Platform.hpp
+++ b/android/jni/com/mapswithme/platform/Platform.hpp
@@ -26,8 +26,6 @@ public:
~Platform() override;
- void ProcessFunctor(jlong functionPointer);
-
void OnExternalStorageStatusChanged(bool isAvailable);
/// get storage path without ending "/MapsWithMe/"
diff --git a/android/src/com/mapswithme/maps/MwmActivity.java b/android/src/com/mapswithme/maps/MwmActivity.java
index 7681d49ed6..85a540699a 100644
--- a/android/src/com/mapswithme/maps/MwmActivity.java
+++ b/android/src/com/mapswithme/maps/MwmActivity.java
@@ -505,8 +505,6 @@ public class MwmActivity extends BaseMwmFragmentActivity
Statistics.INSTANCE.trackConnectionState();
- BookmarkManager.INSTANCE.addListener(this);
-
mSearchController = new FloatingSearchToolbarController(this);
mSearchController.setVisibilityListener(this);
SearchEngine.INSTANCE.addListener(this);
@@ -924,8 +922,6 @@ public class MwmActivity extends BaseMwmFragmentActivity
BottomSheetHelper.free();
SearchEngine.INSTANCE.removeListener(this);
- BookmarkManager.INSTANCE.removeListener(this);
-
super.onDestroy();
}
@@ -1182,6 +1178,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
{
super.onStart();
Framework.nativeSetMapObjectListener(this);
+ BookmarkManager.INSTANCE.addListener(this);
RoutingController.get().attach(this);
if (MapFragment.nativeIsEngineCreated())
LocationHelper.INSTANCE.attach(this);
@@ -1197,6 +1194,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
{
super.onStop();
Framework.nativeRemoveMapObjectListener();
+ BookmarkManager.INSTANCE.removeListener(this);
LocationHelper.INSTANCE.detach(!isFinishing());
RoutingController.get().detach();
TrafficManager.INSTANCE.detachAll();
@@ -2219,7 +2217,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
}
@Override
- public void onBookmarksLoadingFile(boolean success)
+ public void onBookmarksFileLoaded(boolean success)
{
Utils.toastShortcut(MwmActivity.this, success ? R.string.load_kmz_successful :
R.string.load_kmz_failed);
diff --git a/android/src/com/mapswithme/maps/bookmarks/data/BookmarkManager.java b/android/src/com/mapswithme/maps/bookmarks/data/BookmarkManager.java
index f4a2fa3d5c..8550b08e32 100644
--- a/android/src/com/mapswithme/maps/bookmarks/data/BookmarkManager.java
+++ b/android/src/com/mapswithme/maps/bookmarks/data/BookmarkManager.java
@@ -12,16 +12,15 @@ import com.mapswithme.maps.R;
import com.mapswithme.util.statistics.Statistics;
@MainThread
-public class BookmarkManager
+public enum BookmarkManager
{
- public static final BookmarkManager INSTANCE = new BookmarkManager();
+ INSTANCE;
public static final List<Icon> ICONS = new ArrayList<>();
+ @NonNull
private List<BookmarksLoadingListener> mListeners = new ArrayList<>();
- private BookmarkManager() {}
-
static
{
ICONS.add(new Icon("placemark-red", "placemark-red", R.drawable.ic_bookmark_marker_red_off, R.drawable.ic_bookmark_marker_red_on));
@@ -82,12 +81,12 @@ public class BookmarkManager
return bookmark;
}
- public void addListener(BookmarksLoadingListener listener)
+ public void addListener(@NonNull BookmarksLoadingListener listener)
{
mListeners.add(listener);
}
- public void removeListener(BookmarksLoadingListener listener)
+ public void removeListener(@NonNull BookmarksLoadingListener listener)
{
mListeners.remove(listener);
}
@@ -110,9 +109,11 @@ public class BookmarkManager
// Called from JNI.
@MainThread
- public void onBookmarksLoadingFile(boolean success, String fileName, boolean isTemporaryFile)
+ public void onBookmarksFileLoaded(boolean success, @NonNull String fileName,
+ boolean isTemporaryFile)
{
- // Android could create temporary file with bookmarks in some cases. Here we can delete it.
+ // Android could create temporary file with bookmarks in some cases (KML/KMZ file is a blob
+ // in the intent, so we have to create a temporary file on the disk). Here we can delete it.
if (isTemporaryFile)
{
File tmpFile = new File(fileName);
@@ -120,7 +121,7 @@ public class BookmarkManager
}
for (BookmarksLoadingListener listener : mListeners)
- listener.onBookmarksLoadingFile(success);
+ listener.onBookmarksFileLoaded(success);
}
public static native void nativeLoadBookmarks();
@@ -151,7 +152,7 @@ public class BookmarkManager
public static native String nativeGenerateUniqueFileName(String baseName);
- public static native void nativeLoadKmzFile(String path, boolean isTemporaryFile);
+ public static native void nativeLoadKmzFile(@NonNull String path, boolean isTemporaryFile);
public static native String nativeFormatNewBookmarkName();
@@ -161,7 +162,6 @@ public class BookmarkManager
{
void onBookmarksLoadingStarted();
void onBookmarksLoadingFinished();
-
- void onBookmarksLoadingFile(boolean success);
+ void onBookmarksFileLoaded(boolean success);
}
}
diff --git a/base/worker_thread.hpp b/base/worker_thread.hpp
index 9b14b9f162..a0197e2158 100644
--- a/base/worker_thread.hpp
+++ b/base/worker_thread.hpp
@@ -15,8 +15,8 @@ namespace base
{
// This class represents a simple worker thread with a queue of tasks.
//
-// *NOTE* This class IS thread-safe, but it must be destroyed on the
-// same thread it was created.
+// *NOTE* This class IS NOT thread-safe, it must be destroyed on the
+// same thread it was created, but Push* methods are thread-safe.
class WorkerThread : public TaskLoop
{
public:
diff --git a/editor/user_stats.cpp b/editor/user_stats.cpp
index 3a71ea9884..2362085dba 100644
--- a/editor/user_stats.cpp
+++ b/editor/user_stats.cpp
@@ -140,13 +140,13 @@ void UserStatsLoader::Update(string const & userName, UpdatePolicy const policy,
if (nothingToUpdate)
{
- GetPlatform().RunOnGuiThread(fn);
+ GetPlatform().RunTask(Platform::Thread::Gui, fn);
return;
}
threads::SimpleThread([this, userName, fn] {
if (Update(userName))
- GetPlatform().RunOnGuiThread(fn);
+ GetPlatform().RunTask(Platform::Thread::Gui, fn);
}).detach();
}
diff --git a/iphone/Maps/Core/Framework/Framework.cpp b/iphone/Maps/Core/Framework/Framework.cpp
index 606a5a0786..d29dde02cf 100644
--- a/iphone/Maps/Core/Framework/Framework.cpp
+++ b/iphone/Maps/Core/Framework/Framework.cpp
@@ -3,11 +3,11 @@
#include "base/assert.hpp"
static Framework * g_framework = 0;
-bool wasDeleted = false;
+bool g_wasDeleted = false;
Framework & GetFramework()
{
- CHECK(!wasDeleted, ());
+ CHECK(!g_wasDeleted, ());
if (g_framework == 0)
g_framework = new Framework();
return *g_framework;
@@ -15,7 +15,7 @@ Framework & GetFramework()
void DeleteFramework()
{
- wasDeleted = true;
+ g_wasDeleted = true;
delete g_framework;
g_framework = nullptr;
}
diff --git a/iphone/Maps/Core/Framework/MWMFrameworkListener.mm b/iphone/Maps/Core/Framework/MWMFrameworkListener.mm
index 4db0e18b26..b3c459028f 100644
--- a/iphone/Maps/Core/Framework/MWMFrameworkListener.mm
+++ b/iphone/Maps/Core/Framework/MWMFrameworkListener.mm
@@ -95,13 +95,6 @@ void loopWrappers(Observers * observers, TLoopBlock block)
using namespace routing;
using namespace storage;
Observers * observers = self.routeBuildingObservers;
- // TODO(ldragunov,rokuz): Thise two routing callbacks are the only framework callbacks which does
- // not guarantee
- // that they are called on a main UI thread context. Discuss it with Lev.
- // Simplest solution is to insert RunOnGuiThread() call in the core where callbacks are called.
- // This will help to avoid unnecessary parameters copying and will make all our framework
- // callbacks
- // consistent: every notification to UI will run on a main UI thread.
auto & rm = GetFramework().GetRoutingManager();
rm.SetRouteBuildingListener(
[observers](IRouter::ResultCode code, TCountriesVec const & absentCountries) {
diff --git a/map/benchmark_tools.cpp b/map/benchmark_tools.cpp
index e0bc586cfe..8a8dbcb590 100644
--- a/map/benchmark_tools.cpp
+++ b/map/benchmark_tools.cpp
@@ -62,7 +62,7 @@ void RunScenario(Framework * framework, std::shared_ptr<BenchmarkHandle> handle)
auto const drapeStatistic = df::DrapeMeasurer::Instance().GetDrapeStatistic();
handle->m_drapeStatistic.push_back(make_pair(name, drapeStatistic));
#endif
- GetPlatform().RunOnGuiThread([framework, handle]()
+ GetPlatform().RunTask(Platform::Thread::Gui, [framework, handle]()
{
handle->m_currentScenario++;
RunScenario(framework, handle);
diff --git a/map/bookmark.cpp b/map/bookmark.cpp
index 86de538f8a..7926923192 100644
--- a/map/bookmark.cpp
+++ b/map/bookmark.cpp
@@ -28,11 +28,11 @@
#include <memory>
Bookmark::Bookmark(m2::PointD const & ptOrg, UserMarkContainer * container)
- : TBase(ptOrg, container)
+ : Base(ptOrg, container)
{}
Bookmark::Bookmark(BookmarkData const & data, m2::PointD const & ptOrg, UserMarkContainer * container)
- : TBase(ptOrg, container)
+ : Base(ptOrg, container)
, m_data(data)
{}
@@ -136,7 +136,7 @@ Track const * BookmarkCategory::GetTrack(size_t index) const
}
BookmarkCategory::BookmarkCategory(std::string const & name)
- : TBase(0.0 /* bookmarkDepth */, UserMark::Type::BOOKMARK)
+ : Base(0.0 /* bookmarkDepth */, UserMark::Type::BOOKMARK)
, m_name(name)
{}
@@ -168,7 +168,14 @@ void BookmarkCategory::DeleteTrack(size_t index)
m_tracks.erase(next(m_tracks.begin(), index));
}
-void BookmarkCategory::AcceptTracks(std::vector<std::unique_ptr<Track>> && tracks)
+std::vector<std::unique_ptr<Track>> BookmarkCategory::StealTracks()
+{
+ std::vector<std::unique_ptr<Track>> tracks;
+ std::swap(m_tracks, tracks);
+ return std::move(tracks);
+}
+
+void BookmarkCategory::AppendTracks(std::vector<std::unique_ptr<Track>> && tracks)
{
std::move(tracks.begin(), tracks.end(), std::back_inserter(m_tracks));
}
diff --git a/map/bookmark.hpp b/map/bookmark.hpp
index 4d0c996cba..540274b611 100644
--- a/map/bookmark.hpp
+++ b/map/bookmark.hpp
@@ -1,5 +1,6 @@
#pragma once
+#include "map/track.hpp"
#include "map/user_mark.hpp"
#include "map/user_mark_container.hpp"
@@ -22,8 +23,6 @@ namespace anim
class Task;
}
-class Track;
-
class BookmarkData
{
public:
@@ -71,7 +70,7 @@ private:
class Bookmark : public UserMark
{
- using TBase = UserMark;
+ using Base = UserMark;
public:
Bookmark(m2::PointD const & ptOrg, UserMarkContainer * container);
@@ -110,8 +109,7 @@ private:
class BookmarkCategory : public UserMarkContainer
{
- using TBase = UserMarkContainer;
-
+ using Base = UserMarkContainer;
public:
explicit BookmarkCategory(std::string const & name);
~BookmarkCategory() override;
@@ -128,8 +126,8 @@ public:
inline size_t GetTracksCount() const { return m_tracks.size(); }
void DeleteTrack(size_t index);
- std::vector<std::unique_ptr<Track>> && MoveTracks() { return std::move(m_tracks); }
- void AcceptTracks(std::vector<std::unique_ptr<Track>> && tracks);
+ std::vector<std::unique_ptr<Track>> StealTracks();
+ void AppendTracks(std::vector<std::unique_ptr<Track>> && tracks);
void SetName(std::string const & name) { m_name = name; }
std::string const & GetName() const { return m_name; }
@@ -161,7 +159,7 @@ private:
std::vector<std::unique_ptr<Track>> m_tracks;
std::string m_name;
- /// Stores file name from which category was loaded
+ // Stores file name from which bookmarks were loaded.
std::string m_file;
};
diff --git a/map/bookmark_manager.cpp b/map/bookmark_manager.cpp
index c6fa7fdd5e..6a28daaf26 100644
--- a/map/bookmark_manager.cpp
+++ b/map/bookmark_manager.cpp
@@ -40,7 +40,7 @@ using RouteUserMarkContainer = SpecifiedUserMarkContainer<RouteMarkPoint, UserMa
using LocalAdsMarkContainer = SpecifiedUserMarkContainer<LocalAdsMark, UserMark::Type::LOCAL_ADS>;
using StaticUserMarkContainer = SpecifiedUserMarkContainer<SearchMarkPoint, UserMark::Type::STATIC>;
-// It returns extension with a dot in lower case
+// Returns extension with a dot in a lower case.
std::string const GetFileExt(std::string const & filePath)
{
std::string ext = my::GetFileExtension(filePath);
@@ -137,8 +137,8 @@ void BookmarkManager::LoadBookmarks()
{
ClearCategories();
- StartAsyncLoading();
- GetPlatform().RunOnFileThread([this]()
+ NotifyAboutStartAsyncLoading();
+ GetPlatform().RunTask(Platform::Thread::File, [this]()
{
std::string const dir = GetPlatform().SettingsDir();
Platform::FilesList files;
@@ -154,7 +154,7 @@ void BookmarkManager::LoadBookmarks()
if (cat != nullptr)
collection->emplace_back(std::move(cat));
}
- FinishAsyncLoading(std::move(collection));
+ NotifyAboutFinishAsyncLoading(std::move(collection));
});
LoadState();
@@ -162,8 +162,8 @@ void BookmarkManager::LoadBookmarks()
void BookmarkManager::LoadBookmark(std::string const & filePath, bool isTemporaryFile)
{
- StartAsyncLoading();
- GetPlatform().RunOnFileThread([this, filePath, isTemporaryFile]()
+ NotifyAboutStartAsyncLoading();
+ GetPlatform().RunTask(Platform::Thread::File, [this, filePath, isTemporaryFile]()
{
auto collection = std::make_shared<CategoriesCollection>();
auto const fileSavePath = GetKMLPath(filePath);
@@ -186,16 +186,16 @@ void BookmarkManager::LoadBookmark(std::string const & filePath, bool isTemporar
NotifyAboutFile(categoryExists, filePath, isTemporaryFile);
}
- FinishAsyncLoading(std::move(collection));
+ NotifyAboutFinishAsyncLoading(std::move(collection));
});
}
-void BookmarkManager::StartAsyncLoading()
+void BookmarkManager::NotifyAboutStartAsyncLoading()
{
if (m_needTeardown)
return;
- GetPlatform().RunOnGuiThread([this]()
+ GetPlatform().RunTask(Platform::Thread::Gui, [this]()
{
m_asyncLoadingCounter++;
if (m_asyncLoadingCallbacks.m_onStarted != nullptr)
@@ -203,12 +203,12 @@ void BookmarkManager::StartAsyncLoading()
});
}
-void BookmarkManager::FinishAsyncLoading(std::shared_ptr<CategoriesCollection> && collection)
+void BookmarkManager::NotifyAboutFinishAsyncLoading(std::shared_ptr<CategoriesCollection> && collection)
{
if (m_needTeardown)
return;
- GetPlatform().RunOnGuiThread([this, collection]()
+ GetPlatform().RunTask(Platform::Thread::Gui, [this, collection]()
{
if (!collection->empty())
MergeCategories(std::move(*collection));
@@ -225,7 +225,7 @@ void BookmarkManager::NotifyAboutFile(bool success, std::string const & filePath
if (m_needTeardown)
return;
- GetPlatform().RunOnGuiThread([this, success, filePath, isTemporaryFile]()
+ GetPlatform().RunTask(Platform::Thread::Gui, [this, success, filePath, isTemporaryFile]()
{
if (success)
{
@@ -256,7 +256,7 @@ boost::optional<std::string> BookmarkManager::GetKMLPath(std::string const & fil
{
ZipFileReader::FileListT files;
ZipFileReader::FilesList(filePath, files);
- string kmlFileName;
+ std::string kmlFileName;
for (size_t i = 0; i < files.size(); ++i)
{
if (GetFileExt(files[i].first) == BOOKMARKS_FILE_EXTENSION)
@@ -508,20 +508,20 @@ void BookmarkManager::MergeCategories(CategoriesCollection && newCategories)
{
return c->GetName() == categoryName;
});
- if (it != newCategories.end())
- {
- // Copy bookmarks and tracks to the existing category.
- for (size_t i = 0; i < (*it)->GetUserMarkCount(); ++i)
- {
- auto srcBookmark = static_cast<Bookmark const *>((*it)->GetUserMark(i));
- auto bookmark = static_cast<Bookmark *>(category->CreateUserMark(srcBookmark->GetPivot()));
- bookmark->SetData(srcBookmark->GetData());
- }
- category->AcceptTracks((*it)->MoveTracks());
- category->SaveToKMLFile();
+ if (it == newCategories.end())
+ continue;
- newCategories.erase(it);
+ // Copy bookmarks and tracks to the existing category.
+ for (size_t i = 0; i < (*it)->GetUserMarkCount(); ++i)
+ {
+ auto srcBookmark = static_cast<Bookmark const *>((*it)->GetUserMark(i));
+ auto bookmark = static_cast<Bookmark *>(category->CreateUserMark(srcBookmark->GetPivot()));
+ bookmark->SetData(srcBookmark->GetData());
}
+ category->AppendTracks((*it)->StealTracks());
+ category->SaveToKMLFile();
+
+ newCategories.erase(it);
}
std::move(newCategories.begin(), newCategories.end(), std::back_inserter(m_categories));
diff --git a/map/bookmark_manager.hpp b/map/bookmark_manager.hpp
index e21ea9ee64..08a8b5b149 100644
--- a/map/bookmark_manager.hpp
+++ b/map/bookmark_manager.hpp
@@ -100,8 +100,8 @@ private:
void SaveState() const;
void LoadState();
void MergeCategories(CategoriesCollection && newCategories);
- void StartAsyncLoading();
- void FinishAsyncLoading(std::shared_ptr<CategoriesCollection> && collection);
+ void NotifyAboutStartAsyncLoading();
+ void NotifyAboutFinishAsyncLoading(std::shared_ptr<CategoriesCollection> && collection);
boost::optional<std::string> GetKMLPath(std::string const & filePath);
void NotifyAboutFile(bool success, std::string const & filePath, bool isTemporaryFile);
diff --git a/map/framework.cpp b/map/framework.cpp
index 4d9af61108..0b65d90e5a 100644
--- a/map/framework.cpp
+++ b/map/framework.cpp
@@ -607,7 +607,7 @@ void Framework::OnMapDeregistered(platform::LocalCountryFile const & localFile)
if (m_storage.GetThreadChecker().CalledOnOriginalThread())
action();
else
- GetPlatform().RunOnGuiThread(action);
+ GetPlatform().RunTask(Platform::Thread::Gui, action);
auto const mwmId = m_model.GetIndex().GetMwmIdByCountryFile(localFile.GetCountryFile());
m_trafficManager.OnMwmDeregistered(mwmId);
@@ -1220,7 +1220,7 @@ void Framework::OnUpdateCurrentCountry(m2::PointF const & pt, int zoomLevel)
m_lastReportedCountry = newCountryId;
- GetPlatform().RunOnGuiThread([this, newCountryId]()
+ GetPlatform().RunTask(Platform::Thread::Gui, [this, newCountryId]()
{
if (m_currentCountryChanged != nullptr)
m_currentCountryChanged(newCountryId);
@@ -1639,7 +1639,7 @@ void Framework::CreateDrapeEngine(ref_ptr<dp::OGLContextFactory> contextFactory,
auto myPositionModeChangedFn = [this](location::EMyPositionMode mode, bool routingActive)
{
- GetPlatform().RunOnGuiThread([this, mode, routingActive]()
+ GetPlatform().RunTask(Platform::Thread::Gui, [this, mode, routingActive]()
{
// Deactivate selection (and hide place page) if we return to routing in F&R mode.
if (routingActive && mode == location::FollowAndRotate)
@@ -1701,16 +1701,16 @@ void Framework::CreateDrapeEngine(ref_ptr<dp::OGLContextFactory> contextFactory,
m_drapeEngine = make_unique_dp<df::DrapeEngine>(move(p));
m_drapeEngine->SetModelViewListener([this](ScreenBase const & screen)
{
- GetPlatform().RunOnGuiThread([this, screen](){ OnViewportChanged(screen); });
+ GetPlatform().RunTask(Platform::Thread::Gui, [this, screen](){ OnViewportChanged(screen); });
});
m_drapeEngine->SetTapEventInfoListener([this](df::TapInfo const & tapInfo) {
- GetPlatform().RunOnGuiThread([this, tapInfo]() {
+ GetPlatform().RunTask(Platform::Thread::Gui, [this, tapInfo]() {
OnTapEvent({tapInfo, TapEvent::Source::User});
});
});
m_drapeEngine->SetUserPositionListener([this](m2::PointD const & position, bool hasPosition)
{
- GetPlatform().RunOnGuiThread([this, position, hasPosition](){
+ GetPlatform().RunTask(Platform::Thread::Gui, [this, position, hasPosition](){
OnUserPositionChanged(position, hasPosition);
});
});
@@ -3058,7 +3058,10 @@ ads::Engine const & Framework::GetAdsEngine() const
return *m_adsEngine;
}
-void Framework::RunUITask(function<void()> fn) { GetPlatform().RunOnGuiThread(move(fn)); }
+void Framework::RunUITask(function<void()> fn)
+{
+ GetPlatform().RunTask(Platform::Thread::Gui, move(fn));
+}
void Framework::SetSearchDisplacementModeEnabled(bool enabled)
{
diff --git a/map/local_ads_manager.cpp b/map/local_ads_manager.cpp
index f16fa133ee..e6d3cf5ad0 100644
--- a/map/local_ads_manager.cpp
+++ b/map/local_ads_manager.cpp
@@ -142,7 +142,7 @@ void CreateLocalAdsMarks(BookmarkManager * bmManager, CampaignData const & campa
return;
// Here we copy campaign data, because we can create user marks only from UI thread.
- GetPlatform().RunOnGuiThread([bmManager, campaignData]()
+ GetPlatform().RunTask(Platform::Thread::Gui, [bmManager, campaignData]()
{
UserMarkNotificationGuard guard(*bmManager, UserMark::Type::LOCAL_ADS);
for (auto const & data : campaignData)
@@ -161,7 +161,7 @@ void DeleteLocalAdsMarks(BookmarkManager * bmManager, MwmSet::MwmId const & mwmI
if (bmManager == nullptr)
return;
- GetPlatform().RunOnGuiThread([bmManager, mwmId]()
+ GetPlatform().RunTask(Platform::Thread::Gui, [bmManager, mwmId]()
{
UserMarkNotificationGuard guard(*bmManager, UserMark::Type::LOCAL_ADS);
for (size_t i = 0; i < guard.m_controller.GetUserMarkCount();)
@@ -182,7 +182,7 @@ void DeleteAllLocalAdsMarks(BookmarkManager * bmManager)
if (bmManager == nullptr)
return;
- GetPlatform().RunOnGuiThread([bmManager]()
+ GetPlatform().RunTask(Platform::Thread::Gui, [bmManager]()
{
UserMarkNotificationGuard guard(*bmManager, UserMark::Type::LOCAL_ADS);
guard.m_controller.Clear();
diff --git a/map/routing_manager.cpp b/map/routing_manager.cpp
index b60f768298..0a81c1a7f7 100644
--- a/map/routing_manager.cpp
+++ b/map/routing_manager.cpp
@@ -263,7 +263,7 @@ RoutingManager::RoutingManager(Callbacks && callbacks, Delegate & delegate)
m_routingSession.SetCheckpointCallback([this](size_t passedCheckpointIdx)
{
- GetPlatform().RunOnGuiThread([this, passedCheckpointIdx]()
+ GetPlatform().RunTask(Platform::Thread::Gui, [this, passedCheckpointIdx]()
{
size_t const pointsCount = GetRoutePointsCount();
diff --git a/map/routing_manager.hpp b/map/routing_manager.hpp
index bd501817f8..1751226ae7 100644
--- a/map/routing_manager.hpp
+++ b/map/routing_manager.hpp
@@ -116,17 +116,7 @@ public:
// This method was added because we do not want to break the behaviour that is familiar to our
// users.
bool DisableFollowMode();
- /// @TODO(AlexZ): Warning! These two routing callbacks are the only callbacks which are not called
- /// in the main thread context.
- /// UI code should take it into an account. This is a result of current implementation, that can
- /// be improved:
- /// Drape core calls some RunOnGuiThread with "this" pointers, and it causes crashes on Android,
- /// when Drape engine is destroyed
- /// while switching between activities. Current workaround cleans all callbacks when destroying
- /// Drape engine
- /// (@see MwmApplication.clearFunctorsOnUiThread on Android). Better soulution can be fair copying
- /// of all needed information into
- /// lambdas/functors before calling RunOnGuiThread.
+
void SetRouteBuildingListener(RouteBuildingCallback const & buildingCallback)
{
m_routingCallback = buildingCallback;
diff --git a/map/search_mark.cpp b/map/search_mark.cpp
index c4fe9f5155..eb0c6b71cb 100644
--- a/map/search_mark.cpp
+++ b/map/search_mark.cpp
@@ -78,7 +78,7 @@ void SearchMarks::SetDrapeEngine(ref_ptr<df::DrapeEngine> engine)
m_drapeEngine.SafeCall(&df::DrapeEngine::RequestSymbolsSize, kSymbols,
[this](std::vector<m2::PointF> const & sizes)
{
- GetPlatform().RunOnGuiThread([this, sizes](){ m_searchMarksSizes = sizes; });
+ GetPlatform().RunTask(Platform::Thread::Gui, [this, sizes](){ m_searchMarksSizes = sizes; });
});
}
diff --git a/map/traffic_manager.cpp b/map/traffic_manager.cpp
index 7a67d36b88..c118ce2477 100644
--- a/map/traffic_manager.cpp
+++ b/map/traffic_manager.cpp
@@ -80,7 +80,7 @@ void TrafficManager::Teardown()
void TrafficManager::SetStateListener(TrafficStateChangedFn const & onStateChangedFn)
{
- GetPlatform().RunOnGuiThread([this, onStateChangedFn]()
+ GetPlatform().RunTask(Platform::Thread::Gui, [this, onStateChangedFn]()
{
m_onStateChangedFn = onStateChangedFn;
});
@@ -440,7 +440,7 @@ void TrafficManager::ClearCache(MwmSet::MwmId const & mwmId)
m_drapeEngine.SafeCall(&df::DrapeEngine::ClearTrafficCache, mwmId);
- GetPlatform().RunOnGuiThread([this, mwmId]()
+ GetPlatform().RunTask(Platform::Thread::Gui, [this, mwmId]()
{
m_observer.OnTrafficInfoRemoved(mwmId);
});
@@ -527,7 +527,7 @@ void TrafficManager::ChangeState(TrafficState newState)
"$TrafficChangeState",
alohalytics::TStringMap({{"state", DebugPrint(m_state.load())}}));
- GetPlatform().RunOnGuiThread([this, newState]()
+ GetPlatform().RunTask(Platform::Thread::Gui, [this, newState]()
{
if (m_onStateChangedFn != nullptr)
m_onStateChangedFn(newState);
diff --git a/partners_api/booking_api.cpp b/partners_api/booking_api.cpp
index 20b498d43f..cd734cc8e6 100644
--- a/partners_api/booking_api.cpp
+++ b/partners_api/booking_api.cpp
@@ -322,7 +322,7 @@ string Api::GetSearchUrl(string const & city, string const & name) const
void Api::GetMinPrice(string const & hotelId, string const & currency,
GetMinPriceCallback const & fn) const
{
- GetPlatform().RunOnNetworkThread([hotelId, currency, fn]()
+ GetPlatform().RunTask(Platform::Thread::Network, [hotelId, currency, fn]()
{
string minPrice;
string priceCurrency;
@@ -350,7 +350,7 @@ void Api::GetMinPrice(string const & hotelId, string const & currency,
void Api::GetHotelInfo(string const & hotelId, string const & lang,
GetHotelInfoCallback const & fn) const
{
- GetPlatform().RunOnNetworkThread([hotelId, lang, fn]()
+ GetPlatform().RunTask(Platform::Thread::Network, [hotelId, lang, fn]()
{
HotelInfo info;
info.m_hotelId = hotelId;
@@ -379,7 +379,7 @@ void Api::GetHotelInfo(string const & hotelId, string const & lang,
void Api::GetHotelAvailability(AvailabilityParams const & params,
GetHotelAvailabilityCallback const & fn) const
{
- GetPlatform().RunOnNetworkThread([params, fn]()
+ GetPlatform().RunTask(Platform::Thread::Network, [params, fn]()
{
std::vector<std::string> result;
string httpResult;
diff --git a/partners_api/cian_api.cpp b/partners_api/cian_api.cpp
index 9d6ffd6409..53e29e99ee 100644
--- a/partners_api/cian_api.cpp
+++ b/partners_api/cian_api.cpp
@@ -138,7 +138,7 @@ uint64_t Api::GetRentNearby(ms::LatLon const & latlon, RentNearbyCallback const
auto const mercatorRect = MercatorBounds::MetresToXY(latlon.lat, latlon.lon, kSearchRadius);
auto const rect = MercatorBounds::ToLatLonRect(mercatorRect);
- GetPlatform().RunOnNetworkThread([reqId, rect, onSuccess, onError, baseUrl]() {
+ GetPlatform().RunTask(Platform::Thread::Network, [reqId, rect, onSuccess, onError, baseUrl]() {
std::vector<RentPlace> result;
auto const rawResult = RawApi::GetRentNearby(rect, baseUrl);
diff --git a/partners_api/locals_api.cpp b/partners_api/locals_api.cpp
index 72f304335f..e36fc73f68 100644
--- a/partners_api/locals_api.cpp
+++ b/partners_api/locals_api.cpp
@@ -95,8 +95,8 @@ uint64_t Api::GetLocals(double lat, double lon, std::string const & lang,
LocalsErrorCallback const & errorFn)
{
uint64_t id = ++m_requestId;
- GetPlatform().RunOnNetworkThread([id, lat, lon, lang,
- resultsOnPage, pageNumber, successFn, errorFn]()
+ GetPlatform().RunTask(Platform::Thread::Network,
+ [id, lat, lon, lang, resultsOnPage, pageNumber, successFn, errorFn]()
{
std::string result;
if (!RawApi::Get(lat, lon, lang, resultsOnPage, pageNumber, result))
diff --git a/partners_api/uber_api.cpp b/partners_api/uber_api.cpp
index ed2cd67393..b0d1f0a006 100644
--- a/partners_api/uber_api.cpp
+++ b/partners_api/uber_api.cpp
@@ -252,7 +252,7 @@ void Api::GetAvailableProducts(ms::LatLon const & from, ms::LatLon const & to,
maker->Reset(reqId);
- GetPlatform().RunOnNetworkThread([maker, from, reqId, baseUrl, successFn, errorFn]()
+ GetPlatform().RunTask(Platform::Thread::Network, [maker, from, reqId, baseUrl, successFn, errorFn]()
{
string result;
if (!RawApi::GetEstimatedTime(from, result, baseUrl))
@@ -262,7 +262,7 @@ void Api::GetAvailableProducts(ms::LatLon const & from, ms::LatLon const & to,
maker->MakeProducts(reqId, successFn, errorFn);
});
- GetPlatform().RunOnNetworkThread([maker, from, to, reqId, baseUrl, successFn, errorFn]()
+ GetPlatform().RunTask(Platform::Thread::Network, [maker, from, to, reqId, baseUrl, successFn, errorFn]()
{
string result;
if (!RawApi::GetEstimatedPrice(from, to, result, baseUrl))
diff --git a/partners_api/viator_api.cpp b/partners_api/viator_api.cpp
index ac8662971b..8b2ba349db 100644
--- a/partners_api/viator_api.cpp
+++ b/partners_api/viator_api.cpp
@@ -200,7 +200,7 @@ void Api::GetTop5Products(std::string const & destId, std::string const & curren
std::string curr =
kSupportedCurrencies.find(currency) == kSupportedCurrencies.cend() ? "USD" : currency;
- GetPlatform().RunOnNetworkThread([destId, curr, fn]()
+ GetPlatform().RunTask(Platform::Thread::Network, [destId, curr, fn]()
{
string result;
if (!RawApi::GetTopProducts(destId, curr, 5, result))
diff --git a/partners_api/yandex_api.cpp b/partners_api/yandex_api.cpp
index 5c00ba260c..4f337c00a7 100644
--- a/partners_api/yandex_api.cpp
+++ b/partners_api/yandex_api.cpp
@@ -85,7 +85,7 @@ void Api::GetAvailableProducts(ms::LatLon const & from, ms::LatLon const & to,
auto const baseUrl = m_baseUrl;
- GetPlatform().RunOnNetworkThread([from, to, baseUrl, successFn, errorFn]()
+ GetPlatform().RunTask(Platform::Thread::Network, [from, to, baseUrl, successFn, errorFn]()
{
std::string result;
if (!RawApi::GetTaxiInfo(from, to, result, baseUrl))
diff --git a/platform/platform.hpp b/platform/platform.hpp
index 28afc9958b..ee5a73f24a 100644
--- a/platform/platform.hpp
+++ b/platform/platform.hpp
@@ -68,6 +68,13 @@ public:
Unplugged
};
+ enum class Thread : uint8_t
+ {
+ File,
+ Network,
+ Gui
+ };
+
using TFilesWithType = vector<pair<string, EFileType>>;
protected:
@@ -208,28 +215,6 @@ public:
TStorageStatus GetWritableStorageStatus(uint64_t neededSize) const;
uint64_t GetWritableStorageSpace() const;
- /// @name Functions for concurrent tasks.
- //@{
- void RunOnGuiThread(base::TaskLoop::Task && task);
- void RunOnGuiThread(base::TaskLoop::Task const & task);
-
- template <typename Task>
- void RunOnNetworkThread(Task && task) { m_networkThread.Push(forward<Task>(task)); }
-
- template <typename Task>
- void RunOnFileThread(Task && task) { m_fileThread.Push(forward<Task>(task)); }
-
- enum Priority
- {
- EPriorityBackground,
- EPriorityLow,
- EPriorityDefault,
- EPriorityHigh
- };
- using TFunctor = function<void()>;
- void RunAsync(TFunctor const & fn, Priority p = EPriorityDefault);
- //@}
-
// Please note, that number of active cores can vary at runtime.
// DO NOT assume for the same return value between calls.
unsigned CpuCores() const;
@@ -270,12 +255,49 @@ public:
MarketingService & GetMarketingService() { return m_marketingService; }
platform::SecureStorage & GetSecureStorage() { return m_secureStorage; }
+ template <typename Task>
+ void RunTask(Thread thread, Task && task)
+ {
+ switch (thread)
+ {
+ case Thread::File:
+ m_fileThread.Push(forward<Task>(task));
+ break;
+ case Thread::Network:
+ m_networkThread.Push(forward<Task>(task));
+ break;
+ case Thread::Gui:
+ RunOnGuiThread(forward<Task>(task));
+ break;
+ }
+ }
+
+ template <typename Task>
+ void RunTask(Thread thread, Task const & task)
+ {
+ switch (thread)
+ {
+ case Thread::File:
+ m_fileThread.Push(task);
+ break;
+ case Thread::Network:
+ m_networkThread.Push(task);
+ break;
+ case Thread::Gui:
+ RunOnGuiThread(task);
+ break;
+ }
+ }
+
void ShutdownThreads();
// Use this method for testing purposes only.
void SetGuiThread(unique_ptr<base::TaskLoop> guiThread);
private:
+ void RunOnGuiThread(base::TaskLoop::Task && task);
+ void RunOnGuiThread(base::TaskLoop::Task const & task);
+
void GetSystemFontNames(FilesList & res) const;
};
diff --git a/platform/platform_android.cpp b/platform/platform_android.cpp
index 84c799e376..dc19c31d78 100644
--- a/platform/platform_android.cpp
+++ b/platform/platform_android.cpp
@@ -265,26 +265,3 @@ void Platform::SetupMeasurementSystem() const
/// @see implementation of methods below in android/jni/com/.../Platform.cpp
// void RunOnGuiThread(base::TaskLoop::Task && task);
// void RunOnGuiThread(base::TaskLoop::Task const & task);
-
-namespace
-{
-class FunctorWrapper : public threads::IRoutine
-{
- Platform::TFunctor m_fn;
-
-public:
- FunctorWrapper(Platform::TFunctor const & fn) : m_fn(fn) {}
-
- void Do() override { m_fn(); }
-};
-}
-
-void Platform::RunAsync(TFunctor const & fn, Priority p)
-{
- UNUSED_VALUE(p);
-
- // We don't need to store thread handler in POSIX, just create and
- // run. Unfortunately we can't use std::async() here since it
- // doesn't attach to JVM threads.
- threads::Thread().Create(make_unique<FunctorWrapper>(fn));
-}
diff --git a/platform/platform_ios.mm b/platform/platform_ios.mm
index 1ce7f8764d..944a69faf5 100644
--- a/platform/platform_ios.mm
+++ b/platform/platform_ios.mm
@@ -120,12 +120,6 @@ int Platform::VideoMemoryLimit() const { return 8 * 1024 * 1024; }
int Platform::PreCachingDepth() const { return 2; }
string Platform::UniqueClientId() const { return [Alohalytics installationId].UTF8String; }
-static void PerformImpl(void * obj)
-{
- Platform::TFunctor * f = reinterpret_cast<Platform::TFunctor *>(obj);
- (*f)();
- delete f;
-}
string Platform::GetMemoryInfo() const
{
@@ -159,19 +153,6 @@ void Platform::RunOnGuiThread(base::TaskLoop::Task const & task)
m_guiThread->Push(task);
}
-void Platform::RunAsync(TFunctor const & fn, Priority p)
-{
- int priority = DISPATCH_QUEUE_PRIORITY_DEFAULT;
- switch (p)
- {
- case EPriorityBackground: priority = DISPATCH_QUEUE_PRIORITY_BACKGROUND; break;
- case EPriorityDefault: priority = DISPATCH_QUEUE_PRIORITY_DEFAULT; break;
- case EPriorityHigh: priority = DISPATCH_QUEUE_PRIORITY_HIGH; break;
- case EPriorityLow: priority = DISPATCH_QUEUE_PRIORITY_LOW; break;
- }
- dispatch_async_f(dispatch_get_global_queue(priority, 0), new TFunctor(fn), &PerformImpl);
-}
-
Platform::EConnectionType Platform::ConnectionStatus()
{
struct sockaddr_in zero;
diff --git a/platform/platform_mac.mm b/platform/platform_mac.mm
index fe638c4c56..dd82a46a02 100644
--- a/platform/platform_mac.mm
+++ b/platform/platform_mac.mm
@@ -113,13 +113,6 @@ Platform::Platform()
string Platform::UniqueClientId() const { return [Alohalytics installationId].UTF8String; }
-static void PerformImpl(void * obj)
-{
- Platform::TFunctor * f = reinterpret_cast<Platform::TFunctor *>(obj);
- (*f)();
- delete f;
-}
-
void Platform::RunOnGuiThread(base::TaskLoop::Task && task)
{
ASSERT(m_guiThread, ());
@@ -132,21 +125,6 @@ void Platform::RunOnGuiThread(base::TaskLoop::Task const & task)
m_guiThread->Push(task);
}
-void Platform::RunAsync(TFunctor const & fn, Priority p)
-{
- int priority = DISPATCH_QUEUE_PRIORITY_DEFAULT;
- switch (p)
- {
- case EPriorityDefault: priority = DISPATCH_QUEUE_PRIORITY_DEFAULT; break;
- case EPriorityHigh: priority = DISPATCH_QUEUE_PRIORITY_HIGH; break;
- case EPriorityLow: priority = DISPATCH_QUEUE_PRIORITY_LOW; break;
- // It seems like this option is not supported in Snow Leopard.
- //case EPriorityBackground: priority = DISPATCH_QUEUE_PRIORITY_BACKGROUND; break;
- default: priority = INT16_MIN;
- }
- dispatch_async_f(dispatch_get_global_queue(priority, 0), new TFunctor(fn), &PerformImpl);
-}
-
Platform::EConnectionType Platform::ConnectionStatus()
{
struct sockaddr_in zero;
diff --git a/platform/platform_qt.cpp b/platform/platform_qt.cpp
index 3e4348cf68..b84e5b97d6 100644
--- a/platform/platform_qt.cpp
+++ b/platform/platform_qt.cpp
@@ -95,11 +95,6 @@ void Platform::RunOnGuiThread(base::TaskLoop::Task const & task)
ASSERT(m_guiThread, ());
m_guiThread->Push(task);
}
-
-void Platform::RunAsync(TFunctor const & fn, Priority p)
-{
- async(fn);
-}
#endif // defined(OMIM_OS_LINUX)
extern Platform & GetPlatform()
diff --git a/platform/platform_tizen.cpp b/platform/platform_tizen.cpp
index 1d9e7d5b1c..f05ea6dbe6 100644
--- a/platform/platform_tizen.cpp
+++ b/platform/platform_tizen.cpp
@@ -61,12 +61,6 @@ void Platform::RunOnGuiThread(TFunctor const & fn)
fn();
}
-void Platform::RunAsync(TFunctor const & fn, Priority p)
-{
- /// @todo
- fn();
-}
-
ModelReader * Platform::GetReader(string const & file, string const & searchScope) const
{
return new FileReader(ReadPathForFile(file, searchScope),
diff --git a/platform/platform_win.cpp b/platform/platform_win.cpp
index 03eae8d4e2..97841fd875 100644
--- a/platform/platform_win.cpp
+++ b/platform/platform_win.cpp
@@ -132,12 +132,6 @@ void Platform::RunOnGuiThread(TFunctor const & fn)
fn();
}
-void Platform::RunAsync(TFunctor const & fn, Priority p)
-{
- /// @todo
- fn();
-}
-
Platform::EConnectionType Platform::ConnectionStatus()
{
// @TODO Add implementation
diff --git a/platform/safe_callback.hpp b/platform/safe_callback.hpp
index 313e095fc5..2f4f4254dd 100644
--- a/platform/safe_callback.hpp
+++ b/platform/safe_callback.hpp
@@ -32,7 +32,7 @@ public:
void operator()(Args... args) const
{
- GetPlatform().RunOnGuiThread(std::bind(m_fn, std::move(args)...));
+ GetPlatform().RunTask(Platform::Thread::Gui, std::bind(m_fn, std::move(args)...));
}
private:
diff --git a/qt/search_panel.cpp b/qt/search_panel.cpp
index d3633cadc7..053629ff2f 100644
--- a/qt/search_panel.cpp
+++ b/qt/search_panel.cpp
@@ -262,7 +262,8 @@ void SearchPanel::OnSearchTextChanged(QString const & str)
auto const timestamp = ++m_timestamp;
m_params.m_onResults = [this, timestamp](search::Results const & results,
vector<bool> const & /* isLocalAdsCustomer */) {
- GetPlatform().RunOnGuiThread(bind(&SearchPanel::OnSearchResults, this, timestamp, results));
+ GetPlatform().RunTask(Platform::Thread::Gui, bind(&SearchPanel::OnSearchResults, this,
+ timestamp, results));
};
if (m_pDrawWidget->Search(m_params))
diff --git a/search/search_quality/assessment_tool/main_model.cpp b/search/search_quality/assessment_tool/main_model.cpp
index a4f3b30aa7..4650bd4e82 100644
--- a/search/search_quality/assessment_tool/main_model.cpp
+++ b/search/search_quality/assessment_tool/main_model.cpp
@@ -165,8 +165,8 @@ void MainModel::OnSampleSelected(int index)
}
}
- GetPlatform().RunOnGuiThread(bind(&MainModel::OnResults, this, timestamp, index, results,
- relevances, goldenMatching, actualMatching));
+ GetPlatform().RunTask(Platform::Thread::Gui, bind(&MainModel::OnResults, this, timestamp, index, results,
+ relevances, goldenMatching, actualMatching));
};
m_queryHandle = engine.Search(params);
diff --git a/storage/diff_scheme/diff_manager.cpp b/storage/diff_scheme/diff_manager.cpp
index d6dfcb63df..159acd1e10 100644
--- a/storage/diff_scheme/diff_manager.cpp
+++ b/storage/diff_scheme/diff_manager.cpp
@@ -41,7 +41,7 @@ void Manager::Load(LocalMapsInfo && info)
auto & observers = m_observers;
auto status = m_status;
- GetPlatform().RunOnGuiThread([observers, status]() mutable {
+ GetPlatform().RunTask(Platform::Thread::Gui, [observers, status]() mutable {
observers.ForEach(&Observer::OnDiffStatusReceived, status);
});
});
diff --git a/storage/downloading_policy.cpp b/storage/downloading_policy.cpp
index 758f152af8..533e56490a 100644
--- a/storage/downloading_policy.cpp
+++ b/storage/downloading_policy.cpp
@@ -32,7 +32,7 @@ void StorageDownloadingPolicy::ScheduleRetry(storage::TCountriesSet const & fail
--m_autoRetryCounter;
func(failedCountries);
};
- m_autoRetryWorker.RestartWith([action]{ GetPlatform().RunOnGuiThread(action); });
+ m_autoRetryWorker.RestartWith([action]{ GetPlatform().RunTask(Platform::Thread::Gui, action); });
}
else
{
diff --git a/storage/storage.cpp b/storage/storage.cpp
index 585812a74b..2455e2d38f 100644
--- a/storage/storage.cpp
+++ b/storage/storage.cpp
@@ -1422,7 +1422,7 @@ void Storage::ApplyDiff(TCountryId const & countryId, function<void(bool isSucce
m_diffManager.ApplyDiff(move(params), [this, fn, diffFile] (bool const result)
{
- GetPlatform().RunOnGuiThread([this, fn, diffFile, result]
+ GetPlatform().RunTask(Platform::Thread::Gui, [this, fn, diffFile, result]
{
if (result)
{