From: Seongjun Yim Date: Thu, 24 Oct 2013 10:06:01 +0000 (+0900) Subject: optimize performance X-Git-Tag: submit/tizen_2.2/20131107.062229~7 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8969993a70eec139a6e0b9d0b16778ef738ff05b;p=framework%2Fosp%2Fweb.git optimize performance Change-Id: Iecb4deb63e5ed94aacb2e6e37319b2a694711a3e Signed-off-by: Seongjun Yim --- diff --git a/src/controls/FWebCtrl_CertificateConfirmPopup.cpp b/src/controls/FWebCtrl_CertificateConfirmPopup.cpp index e30379a..0ef39ae 100755 --- a/src/controls/FWebCtrl_CertificateConfirmPopup.cpp +++ b/src/controls/FWebCtrl_CertificateConfirmPopup.cpp @@ -39,7 +39,7 @@ #include #include #include "FWebCtrl_CertificateConfirmPopup.h" -#include "FWebCtrl_EflWebkit.h" +#include "FWebCtrl_WebManager.h" #include "FWebCtrl_Utility.h" #include "FWebCtrl_WebImpl.h" diff --git a/src/controls/FWebCtrl_EflWebkit.cpp b/src/controls/FWebCtrl_EflWebkit.cpp index 611a321..4504a4f 100755 --- a/src/controls/FWebCtrl_EflWebkit.cpp +++ b/src/controls/FWebCtrl_EflWebkit.cpp @@ -28,18 +28,12 @@ #include #include #include -#include #include #include -#include #include #include #include -#include -#include -#include #include -#include #include #include #include "FUiAnim_EflNode.h" @@ -64,22 +58,10 @@ namespace Tizen { namespace Web { namespace Controls static const char PLUGIN_DIRECTORY_PATH[] = "/usr/lib/osp/browser-plugin/"; - -extern const wchar_t CUSTOM_DB_DIRECTORY_PATH[] = L"data/.webkit/customDatabase/"; -extern const wchar_t USER_CONFIRM_DB_NAME[] = L"userConfirm.db"; -extern const wchar_t GEOLOCATION_TABLE_NAME[] = L"geolocationPermission"; -extern const wchar_t CUSTOM_PROTOCOL_TABLE_NAME[] = L"customProtocol"; -extern const wchar_t CUSTOM_CONTENT_TABLE_NAME[] = L"customContent"; -extern const wchar_t CERTIFICATE_TABLE_NAME[] = L"certificate"; - - static const wchar_t ICON_DB_DIRECTORY_PATH[] = L"data/.webkit/iconDatabase/"; static const wchar_t ICON_DB_FILE_NAME[] = L"icon.db"; -static const int CUSTOM_DB_TABLE_COUNT= 4; - - _EflWebkit::_EflWebkit(void) : __pWebFrame(null) , __pContainerVisualElement(null) @@ -94,10 +76,15 @@ _EflWebkit::~_EflWebkit(void) { __pContainerVisualElement->SetSurface(null); } + delete __pSurface; -// evas_object_smart_member_del(__pWebFrame); - evas_object_del(__pWebFrame); - __pWebFrame = null; + __pSurface = null; + + if (__pWebFrame) + { + evas_object_del(__pWebFrame); + __pWebFrame = null; + } } @@ -177,12 +164,6 @@ _EflWebkit::SetWebConfiguration(void) const ewk_context_icon_database_path_set(pContext, pIconPath.get()); - r = CreateResourceDirectory(); - SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); - - r = InitializeCustomDb(); - SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); - InitializeCustomHeader(); return E_SUCCESS; @@ -190,99 +171,6 @@ _EflWebkit::SetWebConfiguration(void) const result -_EflWebkit::CreateResourceDirectory(void) const -{ - String html5FeaturesPath(Tizen::App::App::GetInstance()->GetAppRootPath() + CUSTOM_DB_DIRECTORY_PATH); - - if (!_FileImpl::IsFileExist(html5FeaturesPath)) - { - result r = E_SUCCESS; - - r = _DirectoryImpl::Create(html5FeaturesPath, true); - SysTryReturnResult(NID_WEB_CTRL, r == E_SUCCESS, E_SYSTEM, "A system error has been occurred. create html5 features directory."); - } - - return E_SUCCESS; -} - - -result -_EflWebkit::InitializeCustomDb(void) const -{ - result r = E_SUCCESS; - - _DatabaseImpl db; - String path(Tizen::App::App::GetInstance()->GetAppRootPath() + CUSTOM_DB_DIRECTORY_PATH + USER_CONFIRM_DB_NAME); - String geolocationTable(GEOLOCATION_TABLE_NAME); - String protocolTable(CUSTOM_PROTOCOL_TABLE_NAME); - String contentTable(CUSTOM_CONTENT_TABLE_NAME); - String certificateTable(CERTIFICATE_TABLE_NAME); - - r = db.Construct(path, "a+", null); - SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); - - std::unique_ptr pEnum(db.QueryN(L"Select count(name) from sqlite_master Where type='table' And name in ('" + geolocationTable + L"', '" + protocolTable + L"', '" + contentTable + L"', '" + certificateTable + L"')")); - if (pEnum.get()) - { - int count = 0; - - r = pEnum->MoveNext(); - SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, false, r, "[%s] Propagating.", GetErrorMessage(r)); - - r = pEnum->GetIntAt(0, count); - SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, false, r, "[%s] Propagating.", GetErrorMessage(r)); - - if (count == CUSTOM_DB_TABLE_COUNT) - { - return E_SUCCESS; - } - } - - pEnum.reset(); - pEnum = std::unique_ptr(db.QueryN(L"Select name from sqlite_master Where type='table' And name = '" + geolocationTable + L"'")); - if (!pEnum.get()) - { - r = db.ExecuteSql( - L"CREATE TABLE IF NOT EXISTS " + geolocationTable + L"(id INTEGER PRIMARY KEY AUTOINCREMENT, origin TEXT, permission INTEGER)", - true); - SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); - } - - pEnum.reset(); - pEnum = std::unique_ptr(db.QueryN(L"Select name from sqlite_master Where type='table' And name = '" + protocolTable + L"'")); - if (!pEnum.get()) - { - r = db.ExecuteSql( - L"CREATE TABLE IF NOT EXISTS " + protocolTable + L"(id INTEGER PRIMARY KEY AUTOINCREMENT, baseUrl TEXT, url TEXT, mime TEXT, allow INTEGER)", - true); - SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); - } - - pEnum.reset(); - pEnum = std::unique_ptr(db.QueryN(L"Select name from sqlite_master Where type='table' And name = '" + contentTable + L"'")); - if (!pEnum.get()) - { - r = db.ExecuteSql( - L"CREATE TABLE IF NOT EXISTS " + contentTable + L"(id INTEGER PRIMARY KEY AUTOINCREMENT, baseUrl TEXT, url TEXT, mime TEXT, allow INTEGER)", - true); - SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); - } - - pEnum.reset(); - pEnum = std::unique_ptr(db.QueryN(L"Select name from sqlite_master Where type='table' And name = '" + certificateTable + L"'")); - if (!pEnum.get()) - { - r = db.ExecuteSql( - L"CREATE TABLE IF NOT EXISTS " + certificateTable + L"(id INTEGER PRIMARY KEY AUTOINCREMENT, pem TEXT, allow INTEGER)", - true); - SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); - } - - return E_SUCCESS; -} - - -result _EflWebkit::SetProxyAddress(char* pProxy) const { Ewk_Context* pContext = ewk_view_context_get(__pWebFrame); diff --git a/src/controls/FWebCtrl_EflWebkit.h b/src/controls/FWebCtrl_EflWebkit.h index 8b5dbbf..5c3a239 100755 --- a/src/controls/FWebCtrl_EflWebkit.h +++ b/src/controls/FWebCtrl_EflWebkit.h @@ -47,13 +47,6 @@ class VisualElementSurface; namespace Tizen { namespace Web { namespace Controls { -_OSP_EXPORT_ extern const wchar_t CUSTOM_DB_DIRECTORY_PATH[]; -_OSP_EXPORT_ extern const wchar_t USER_CONFIRM_DB_NAME[]; -_OSP_EXPORT_ extern const wchar_t GEOLOCATION_TABLE_NAME[]; -_OSP_EXPORT_ extern const wchar_t CUSTOM_PROTOCOL_TABLE_NAME[]; -_OSP_EXPORT_ extern const wchar_t CUSTOM_CONTENT_TABLE_NAME[]; -_OSP_EXPORT_ extern const wchar_t CERTIFICATE_TABLE_NAME[]; - class _EflWebkit : public Tizen::Base::Object { @@ -75,10 +68,6 @@ private: result SetWebConfiguration(void) const; - result CreateResourceDirectory(void) const; - - result InitializeCustomDb(void) const; - void InitializeCustomHeader(void) const; _EflWebkit& operator =(const _EflWebkit&); diff --git a/src/controls/FWebCtrl_GeolocationPermissionManagerImpl.cpp b/src/controls/FWebCtrl_GeolocationPermissionManagerImpl.cpp index 7f069ca..c0452da 100755 --- a/src/controls/FWebCtrl_GeolocationPermissionManagerImpl.cpp +++ b/src/controls/FWebCtrl_GeolocationPermissionManagerImpl.cpp @@ -28,7 +28,7 @@ #include #include #include -#include "FWebCtrl_EflWebkit.h" +#include "FWebCtrl_WebManager.h" #include "FWebCtrl_GeolocationPermissionManagerImpl.h" diff --git a/src/controls/FWebCtrl_UserConfirmPopup.cpp b/src/controls/FWebCtrl_UserConfirmPopup.cpp index c73961e..6f73c03 100755 --- a/src/controls/FWebCtrl_UserConfirmPopup.cpp +++ b/src/controls/FWebCtrl_UserConfirmPopup.cpp @@ -43,7 +43,7 @@ #include #include #include -#include "FWebCtrl_EflWebkit.h" +#include "FWebCtrl_WebManager.h" #include "FWebCtrl_UserConfirmPopup.h" #include "FWebCtrl_Utility.h" #include "FWebCtrl_WebImpl.h" diff --git a/src/controls/FWebCtrl_WebImpl.cpp b/src/controls/FWebCtrl_WebImpl.cpp index 8fabc3d..271d1b9 100755 --- a/src/controls/FWebCtrl_WebImpl.cpp +++ b/src/controls/FWebCtrl_WebImpl.cpp @@ -2294,9 +2294,7 @@ _WebImpl::~_WebImpl() { _WebManager* pWebManager = _WebManager::GetInstance(); SysTryCatch(NID_WEB_CTRL, pWebManager, , E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY)); - pWebManager->RemoveWeb(reinterpret_cast< int >(this)); - pWebManager->RemoveActiveWeb(this); CATCH: _SettingInfoImpl::RemoveSettingEventListener(*this); @@ -5125,12 +5123,6 @@ _WebImpl::OnPreAttachedToMainTree(void) { result r = E_SUCCESS; - if (IsVisible() == true) - { - _WebManager* pWebManager = _WebManager::GetInstance(); - pWebManager->SetActiveWeb(this); - } - r = _ContainerImpl::OnPreAttachedToMainTree(); SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); @@ -5140,7 +5132,7 @@ _WebImpl::OnPreAttachedToMainTree(void) SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); _ControlManager* pControlManager = _ControlManager::GetInstance(); - SysTryReturnResult(NID_WEB_CTRL, pControlManager, E_SYSTEM, "Failed to get the ControlManager instance."); + SysTryReturnResult(NID_WEB_CTRL, pControlManager, E_SYSTEM, "Failed to get the _ControlManager instance."); OnChangeLayout(pControlManager->GetScreenRotation()); r = InitializeSetting(); @@ -5149,9 +5141,17 @@ _WebImpl::OnPreAttachedToMainTree(void) _SettingInfoImpl::AddSettingEventListener(*this); _WebManager* pWebManager = _WebManager::GetInstance(); + SysTryReturnResult(NID_WEB_CTRL, pWebManager, E_SYSTEM, "Failed to get the _WebManager instance."); pWebManager->AddWeb(reinterpret_cast< int >(this)); } + if (IsVisible() == true) + { + _WebManager* pWebManager = _WebManager::GetInstance(); + SysTryReturnResult(NID_WEB_CTRL, pWebManager, E_SYSTEM, "Failed to get the _WebManager instance."); + pWebManager->SetActiveWeb(this); + } + return E_SUCCESS; } @@ -5161,12 +5161,13 @@ _WebImpl::OnDetachingFromMainTree(void) { result r = E_SUCCESS; - _WebManager* pWebManager = _WebManager::GetInstance(); - pWebManager->RemoveActiveWeb(this); - r = _ContainerImpl::OnDetachingFromMainTree(); SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); + _WebManager* pWebManager = _WebManager::GetInstance(); + SysTryReturnResult(NID_WEB_CTRL, pWebManager, E_SYSTEM, "Failed to get the _WebManager instance."); + pWebManager->RemoveActiveWeb(this); + return E_SUCCESS; } @@ -5261,6 +5262,7 @@ _WebImpl::OnAncestorVisibleStateChanged(const _Control& control) } _WebManager* pWebManager = _WebManager::GetInstance(); + SysTryReturnVoidResult(NID_WEB_CTRL, pWebManager, E_SYSTEM, "[E_SYSTEM] Failed to get the _WebManager instance."); if (IsVisible() == true) { pWebManager->SetActiveWeb(this); diff --git a/src/controls/FWebCtrl_WebManager.cpp b/src/controls/FWebCtrl_WebManager.cpp index 2804ead..6b36392 100755 --- a/src/controls/FWebCtrl_WebManager.cpp +++ b/src/controls/FWebCtrl_WebManager.cpp @@ -23,9 +23,17 @@ */ #include #include +#include #include +#include #include +#include +#include +#include #include +#include +#include +#include #include "FWebCtrl_EflWebkit.h" #include "FWebCtrl_Web.h" #include "FWebCtrl_WebImpl.h" @@ -34,6 +42,7 @@ using namespace Tizen::Base; using namespace Tizen::Base::Collection; +using namespace Tizen::Io; using namespace Tizen::Ui; using namespace Tizen::Ui::Controls; @@ -44,6 +53,17 @@ namespace Tizen { namespace Web { namespace Controls _WebManager* _WebManager::__pInstance = null; +extern const wchar_t CUSTOM_DB_DIRECTORY_PATH[] = L"data/.webkit/customDatabase/"; +extern const wchar_t USER_CONFIRM_DB_NAME[] = L"userConfirm.db"; +extern const wchar_t GEOLOCATION_TABLE_NAME[] = L"geolocationPermission"; +extern const wchar_t CUSTOM_PROTOCOL_TABLE_NAME[] = L"customProtocol"; +extern const wchar_t CUSTOM_CONTENT_TABLE_NAME[] = L"customContent"; +extern const wchar_t CERTIFICATE_TABLE_NAME[] = L"certificate"; + + +static const int CUSTOM_DB_TABLE_COUNT= 4; + + _WebManager::_WebManager(void) : __pWebList(null) , __pCallbackList(null) @@ -118,8 +138,14 @@ _WebManager::Construct(void) SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); r = InitializeProxyAddress(); - SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); - + SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); + + r = CreateResourceDirectory(); + SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); + + r = InitializeCustomDb(); + SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); + __pWebList = std::move(pWebList); __pCallbackList = std::move(pCallbackList); @@ -151,13 +177,105 @@ _WebManager::InitializeProxyAddress(void) } +result +_WebManager::CreateResourceDirectory(void) const +{ + String html5FeaturesPath(Tizen::App::App::GetInstance()->GetAppRootPath() + CUSTOM_DB_DIRECTORY_PATH); + + if (!_FileImpl::IsFileExist(html5FeaturesPath)) + { + result r = E_SUCCESS; + + r = _DirectoryImpl::Create(html5FeaturesPath, true); + SysTryReturnResult(NID_WEB_CTRL, r == E_SUCCESS, E_SYSTEM, "A system error has been occurred. create html5 features directory."); + } + + return E_SUCCESS; +} + + +result +_WebManager::InitializeCustomDb(void) const +{ + result r = E_SUCCESS; + + _DatabaseImpl db; + String path(Tizen::App::App::GetInstance()->GetAppRootPath() + CUSTOM_DB_DIRECTORY_PATH + USER_CONFIRM_DB_NAME); + String geolocationTable(GEOLOCATION_TABLE_NAME); + String protocolTable(CUSTOM_PROTOCOL_TABLE_NAME); + String contentTable(CUSTOM_CONTENT_TABLE_NAME); + String certificateTable(CERTIFICATE_TABLE_NAME); + + r = db.Construct(path, "a+", null); + SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); + + std::unique_ptr pEnum(db.QueryN(L"Select count(name) from sqlite_master Where type='table' And name in ('" + geolocationTable + L"', '" + protocolTable + L"', '" + contentTable + L"', '" + certificateTable + L"')")); + if (pEnum.get()) + { + int count = 0; + + r = pEnum->MoveNext(); + SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, false, r, "[%s] Propagating.", GetErrorMessage(r)); + + r = pEnum->GetIntAt(0, count); + SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, false, r, "[%s] Propagating.", GetErrorMessage(r)); + + if (count == CUSTOM_DB_TABLE_COUNT) + { + return E_SUCCESS; + } + } + + pEnum.reset(); + pEnum = std::unique_ptr(db.QueryN(L"Select name from sqlite_master Where type='table' And name = '" + geolocationTable + L"'")); + if (!pEnum.get()) + { + r = db.ExecuteSql( + L"CREATE TABLE IF NOT EXISTS " + geolocationTable + L"(id INTEGER PRIMARY KEY AUTOINCREMENT, origin TEXT, permission INTEGER)", + true); + SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); + } + + pEnum.reset(); + pEnum = std::unique_ptr(db.QueryN(L"Select name from sqlite_master Where type='table' And name = '" + protocolTable + L"'")); + if (!pEnum.get()) + { + r = db.ExecuteSql( + L"CREATE TABLE IF NOT EXISTS " + protocolTable + L"(id INTEGER PRIMARY KEY AUTOINCREMENT, baseUrl TEXT, url TEXT, mime TEXT, allow INTEGER)", + true); + SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); + } + + pEnum.reset(); + pEnum = std::unique_ptr(db.QueryN(L"Select name from sqlite_master Where type='table' And name = '" + contentTable + L"'")); + if (!pEnum.get()) + { + r = db.ExecuteSql( + L"CREATE TABLE IF NOT EXISTS " + contentTable + L"(id INTEGER PRIMARY KEY AUTOINCREMENT, baseUrl TEXT, url TEXT, mime TEXT, allow INTEGER)", + true); + SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); + } + + pEnum.reset(); + pEnum = std::unique_ptr(db.QueryN(L"Select name from sqlite_master Where type='table' And name = '" + certificateTable + L"'")); + if (!pEnum.get()) + { + r = db.ExecuteSql( + L"CREATE TABLE IF NOT EXISTS " + certificateTable + L"(id INTEGER PRIMARY KEY AUTOINCREMENT, pem TEXT, allow INTEGER)", + true); + SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r)); + } + + return E_SUCCESS; +} + + result _WebManager::AddWeb(int webAdress) { result r = E_SUCCESS; _WebImpl* pImpl = reinterpret_cast< _WebImpl* >(webAdress); - _Web* pWebCore = dynamic_cast< _Web* >(&(pImpl->GetCore())); r = pWebCore->GetEflWebkit()->SetProxyAddress(__pProxy); diff --git a/src/controls/FWebCtrl_WebManager.h b/src/controls/FWebCtrl_WebManager.h index 8cdb305..ed5262f 100755 --- a/src/controls/FWebCtrl_WebManager.h +++ b/src/controls/FWebCtrl_WebManager.h @@ -30,6 +30,14 @@ namespace Tizen { namespace Web { namespace Controls { + +_OSP_EXPORT_ extern const wchar_t CUSTOM_DB_DIRECTORY_PATH[]; +_OSP_EXPORT_ extern const wchar_t USER_CONFIRM_DB_NAME[]; +_OSP_EXPORT_ extern const wchar_t GEOLOCATION_TABLE_NAME[]; +_OSP_EXPORT_ extern const wchar_t CUSTOM_PROTOCOL_TABLE_NAME[]; +_OSP_EXPORT_ extern const wchar_t CUSTOM_CONTENT_TABLE_NAME[]; +_OSP_EXPORT_ extern const wchar_t CERTIFICATE_TABLE_NAME[]; + class _WebImpl; class _WebPopup; @@ -62,7 +70,10 @@ private: static void InitWebManager(void); static void DestroyWebManager(void); + result InitializeProxyAddress(void); + result CreateResourceDirectory(void) const; + result InitializeCustomDb(void) const; _WebManager& operator=(const _WebManager& rhs);