From 81a36ac0efd23154e449ccd132492a6893c0dacd Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Fri, 9 Apr 2021 17:44:03 +0200 Subject: [PATCH] Sqlite: Optimize the initialization https: //www.sqlite.org/compile.html#omit_autoinit Change-Id: Iaa91203be21f01a19235a9401cb4fa412eca8276 Reviewed-by: Thomas Hartmann --- src/libs/sqlite/CMakeLists.txt | 3 +- src/libs/sqlite/sqlite-lib.pri | 4 +- src/libs/sqlite/sqlitelibraryinitializer.cpp | 47 +++++++++++++++++++ src/libs/sqlite/sqlitelibraryinitializer.h | 42 +++++++++++++++++ src/plugins/qmldesigner/qmldesignerplugin.cpp | 11 +++-- tests/unit/unittest/unittests-main.cpp | 3 ++ 6 files changed, 104 insertions(+), 6 deletions(-) create mode 100644 src/libs/sqlite/sqlitelibraryinitializer.cpp create mode 100644 src/libs/sqlite/sqlitelibraryinitializer.h diff --git a/src/libs/sqlite/CMakeLists.txt b/src/libs/sqlite/CMakeLists.txt index 4bf3ae91df0..dd4c9f1a581 100644 --- a/src/libs/sqlite/CMakeLists.txt +++ b/src/libs/sqlite/CMakeLists.txt @@ -10,7 +10,7 @@ add_qtc_library(Sqlite SQLITE_OMIT_LOAD_EXTENSION SQLITE_OMIT_UTF16 SQLITE_DQS=0 SQLITE_ENABLE_STAT4 HAVE_ISNAN HAVE_FDATASYNC HAVE_MALLOC_USABLE_SIZE SQLITE_DEFAULT_MMAP_SIZE=268435456 SQLITE_CORE SQLITE_ENABLE_SESSION SQLITE_ENABLE_PREUPDATE_HOOK - SQLITE_LIKE_DOESNT_MATCH_BLOBS + SQLITE_LIKE_DOESNT_MATCH_BLOBS SQLITE_OMIT_AUTOINIT DEPENDS Qt5::Core Threads::Threads ${CMAKE_DL_LIBS} PUBLIC_INCLUDES "${CMAKE_CURRENT_LIST_DIR}" @@ -46,4 +46,5 @@ add_qtc_library(Sqlite utf8stringvector.cpp utf8stringvector.h sqliteblob.h sqlitetimestamp.h + sqlitelibraryinitializer.cpp sqlitelibraryinitializer.h ) diff --git a/src/libs/sqlite/sqlite-lib.pri b/src/libs/sqlite/sqlite-lib.pri index 87b63eb388e..3eb64fe9d37 100644 --- a/src/libs/sqlite/sqlite-lib.pri +++ b/src/libs/sqlite/sqlite-lib.pri @@ -15,6 +15,7 @@ SOURCES += \ $$PWD/sqlitedatabasebackend.cpp \ $$PWD/sqliteexception.cpp \ $$PWD/sqliteglobal.cpp \ + $$PWD/sqlitelibraryinitializer.cpp \ $$PWD/sqlitesessionchangeset.cpp \ $$PWD/sqlitesessions.cpp \ $$PWD/sqlstatementbuilder.cpp \ @@ -25,6 +26,7 @@ SOURCES += \ HEADERS += \ $$PWD/constraints.h \ $$PWD/sqliteblob.h \ + $$PWD/sqlitelibraryinitializer.h \ $$PWD/sqlitetimestamp.h \ $$PWD/tableconstraints.h \ $$PWD/createtablesqlstatementbuilder.h \ @@ -59,7 +61,7 @@ DEFINES += SQLITE_THREADSAFE=2 SQLITE_ENABLE_FTS5 SQLITE_ENABLE_UNLOCK_NOTIFY \ SQLITE_OMIT_LOAD_EXTENSION SQLITE_OMIT_UTF16 SQLITE_DQS=0 \ SQLITE_ENABLE_STAT4 HAVE_ISNAN HAVE_FDATASYNC HAVE_MALLOC_USABLE_SIZE \ SQLITE_DEFAULT_MMAP_SIZE=268435456 SQLITE_CORE SQLITE_ENABLE_SESSION SQLITE_ENABLE_PREUPDATE_HOOK \ - SQLITE_LIKE_DOESNT_MATCH_BLOBS + SQLITE_LIKE_DOESNT_MATCH_BLOBS SQLITE_OMIT_AUTOINIT CONFIG(debug, debug|release): DEFINES += SQLITE_ENABLE_API_ARMOR diff --git a/src/libs/sqlite/sqlitelibraryinitializer.cpp b/src/libs/sqlite/sqlitelibraryinitializer.cpp new file mode 100644 index 00000000000..c42d1269661 --- /dev/null +++ b/src/libs/sqlite/sqlitelibraryinitializer.cpp @@ -0,0 +1,47 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +#include "sqlitelibraryinitializer.h" + +#include "sqlitedatabasebackend.h" + +namespace Sqlite { + +void LibraryInitializer::initialize() +{ + static LibraryInitializer initializer; +} + +LibraryInitializer::LibraryInitializer() +{ + DatabaseBackend::initializeSqliteLibrary(); +} + +LibraryInitializer::~LibraryInitializer() +{ + DatabaseBackend::shutdownSqliteLibrary(); +} + +} // namespace Sqlite diff --git a/src/libs/sqlite/sqlitelibraryinitializer.h b/src/libs/sqlite/sqlitelibraryinitializer.h new file mode 100644 index 00000000000..6df8b19a22e --- /dev/null +++ b/src/libs/sqlite/sqlitelibraryinitializer.h @@ -0,0 +1,42 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +#pragma once + +#include "sqliteglobal.h" + +namespace Sqlite { + +class LibraryInitializer +{ +public: + SQLITE_EXPORT static void initialize(); + +private: + LibraryInitializer(); + ~LibraryInitializer(); +}; + +} // namespace Sqlite diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp index 1d56ef0e8ce..489d7951c13 100644 --- a/src/plugins/qmldesigner/qmldesignerplugin.cpp +++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp @@ -55,18 +55,19 @@ #include #include #include +#include #include #include #include #include -#include #include #include -#include -#include #include -#include +#include #include +#include +#include +#include #include #include @@ -211,6 +212,8 @@ QmlDesignerPlugin::~QmlDesignerPlugin() //////////////////////////////////////////////////// bool QmlDesignerPlugin::initialize(const QStringList & /*arguments*/, QString *errorMessage/* = 0*/) { + Sqlite::LibraryInitializer::initialize(); + QDir{}.mkpath(Core::ICore::cacheResourcePath()); if (!Utils::HostOsInfo::canCreateOpenGLContext(errorMessage)) diff --git a/tests/unit/unittest/unittests-main.cpp b/tests/unit/unittest/unittests-main.cpp index 26993dd9ded..5f5146de794 100644 --- a/tests/unit/unittest/unittests-main.cpp +++ b/tests/unit/unittest/unittests-main.cpp @@ -26,6 +26,8 @@ #include "googletest.h" #include +#include + #include #include @@ -52,6 +54,7 @@ public: int main(int argc, char *argv[]) { + Sqlite::LibraryInitializer::initialize(); Sqlite::Database::activateLogging(); QGuiApplication application(argc, argv);