Marco Martin 6cbea20bf9 try to preload certain applets in a smart way
Summary:
preload popups of some applets after init in the background
based on a value of X-Plasma-PreloadWeight in the desktop file
if present, otherwise some default values based on the applet
type (Provides)

Save the weight in the config, if an applet is never opened,
slowly decrease the weight, when it reaches 0 don't preload it
next start, increase every time it gets opened, so at the moment
it's quite aggressive about preloading, in order to not do it
a lot of plasma startups without touching the applet are needed

Applet with a very big weigth will be preloaded immediately,
therefore having an impact on the time it will take to have
a panel visible and usable, while lesser weigths will preload
after a random number of seconds between 2 and 10, so will load
in the background after everything is started

Test Plan:
Plasma starts up correctly, applets load correctly and can be added
correctly both those expanded or collapsed.
plasmashell appears correctly usable without too big hiccups even
while it's loading things in the background

some numbers:
without preloading, plasma takes around 64 mb of memory after startup
when preloading everything about 94, so it's a cost of about 30 mb
which is not negligible.
don't have precise timing, but if everything gets preloaded immediately,
the time to get an usable desktop appears to be at least doubled,
while the delayed preloading (except just a couple of applets) doesn't
seem to have a big impact on the time needed to get an usable desktop

Reviewers: #plasma

Subscribers: davidedmundson, broulik, apol, ngraham, plasma-devel, #frameworks

Tags: #plasma, #frameworks

Differential Revision: https://phabricator.kde.org/D10512
2018-02-19 18:34:24 +01:00

120 lines
3.4 KiB
CMake

if(HAVE_X11 AND XCB_XCB_FOUND AND XCB_SHAPE_FOUND)
add_definitions(-DHAVE_XCB_SHAPE=1)
else()
add_definitions(-DHAVE_XCB_SHAPE=0)
endif()
set(plasmaquick_LIB_SRC
appletquickitem.cpp
debug_p.cpp
dialog.cpp
dialogshadows.cpp
view.cpp
containmentview.cpp
configmodel.cpp
shellpluginloader.cpp
configview.cpp
packageurlinterceptor.cpp
private/configcategory_p.cpp
private/packages.cpp
../declarativeimports/core/framesvgitem.cpp
../declarativeimports/core/units.cpp
)
ecm_qt_declare_logging_category(PlasmaQuick_LIB_SRCS HEADER debug_p.h IDENTIFIER LOG_PLASMAQUICK CATEGORY_NAME org.kde.plasmaquick)
add_library(KF5PlasmaQuick SHARED ${plasmaquick_LIB_SRC})
add_library(KF5::PlasmaQuick ALIAS KF5PlasmaQuick)
target_include_directories(KF5PlasmaQuick PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR};${CMAKE_CURRENT_BINARY_DIR}/..>")
target_link_libraries(KF5PlasmaQuick
PUBLIC
Qt5::Gui
Qt5::Quick
Qt5::Qml
KF5::Plasma
KF5::WindowSystem
PRIVATE
KF5::KIOWidgets
KF5::I18n
KF5::IconThemes
KF5::Service
KF5::CoreAddons
KF5::XmlGui
KF5::Declarative
KF5::QuickAddons
)
if(HAVE_KWAYLAND)
target_link_libraries(KF5PlasmaQuick
PRIVATE
KF5::WaylandClient
)
endif()
if(HAVE_X11)
target_link_libraries(KF5PlasmaQuick
PRIVATE
Qt5::X11Extras
${X11_LIBRARIES}
XCB::XCB
)
if(XCB_SHAPE_FOUND)
target_link_libraries(KF5PlasmaQuick PRIVATE XCB::SHAPE)
endif()
endif()
set_target_properties(KF5PlasmaQuick PROPERTIES
VERSION ${PLASMA_VERSION_STRING}
SOVERSION ${PLASMA_SOVERSION}
EXPORT_NAME PlasmaQuick
)
install(TARGETS KF5PlasmaQuick EXPORT KF5PlasmaQuickTargets ${KF5_INSTALL_TARGETS_DEFAULT_ARGS})
generate_export_header(KF5PlasmaQuick BASE_NAME PlasmaQuick)
set(plasmaquick_LIB_INCLUDES
${CMAKE_CURRENT_BINARY_DIR}/plasmaquick_export.h
packageurlinterceptor.h
)
ecm_generate_headers(PlasmaQuick_CamelCase_HEADERS
HEADER_NAMES
AppletQuickItem
ContainmentView
ConfigView
ConfigModel
Dialog
REQUIRED_HEADERS plasmaquick_LIB_INCLUDES
PREFIX PlasmaQuick
)
install(FILES ${plasmaquick_LIB_INCLUDES}
DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/plasmaquick COMPONENT Devel)
install(FILES ${PlasmaQuick_CamelCase_HEADERS}
DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5}/PlasmaQuick COMPONENT Devel)
set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KF5PlasmaQuick")
configure_package_config_file(
"${CMAKE_CURRENT_SOURCE_DIR}/KF5PlasmaQuickConfig.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/KF5PlasmaQuickConfig.cmake"
INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR}
PATH_VARS KF5_INCLUDE_INSTALL_DIR CMAKE_INSTALL_PREFIX
)
ecm_setup_version(${KF5_VERSION}
VARIABLE_PREFIX PLASMAQUICK
PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF5PlasmaQuickConfigVersion.cmake" )
install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/KF5PlasmaQuickConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/KF5PlasmaQuickConfigVersion.cmake"
DESTINATION "${CMAKECONFIG_INSTALL_DIR}" COMPONENT Devel
)
install(EXPORT KF5PlasmaQuickTargets DESTINATION "${CMAKECONFIG_INSTALL_DIR}" FILE KF5PlasmaQuickTargets.cmake NAMESPACE KF5:: )