mirror of
https://github.com/SpartanJ/eepp.git
synced 2026-10-27 08:37:58 +03:00
fix(accessibility): stabilize inactive backend benchmark timing
- expose whether native backend initialization has completed - distinguish completed initialization from backend availability - wait up to one second for asynchronous initialization in benchmark mode - exclude AT-SPI registration activity from notification timing - report backend readiness latency in benchmark results - verify disabled backends complete initialization immediately
This commit is contained in:
@@ -43,6 +43,8 @@ class EE_API AccessibilityManager {
|
||||
|
||||
bool isBackendAvailable() const;
|
||||
|
||||
bool isBackendInitializationComplete() const;
|
||||
|
||||
bool hasActiveNativeClients() const;
|
||||
|
||||
/** Updates the scene's cached fast-path flag after an actual native accessibility query. */
|
||||
|
||||
@@ -47,6 +47,7 @@ def run_sample(args, disabled):
|
||||
result = json.loads(completed.stdout)
|
||||
result["wall_ms"] = wall_ms
|
||||
result["initialization_ms"] = result.pop("initialization_us") / 1000
|
||||
result["readiness_ms"] = result.pop("readiness_us") / 1000
|
||||
result["notifications_ms"] = result.pop("notifications_us") / 1000
|
||||
return result
|
||||
|
||||
|
||||
@@ -14,6 +14,8 @@ class AccessibilityBackend {
|
||||
|
||||
virtual bool isAvailable() const = 0;
|
||||
|
||||
virtual bool isInitializationComplete() const { return true; }
|
||||
|
||||
virtual bool hasActiveClients() const { return false; }
|
||||
|
||||
virtual void update() {}
|
||||
|
||||
@@ -302,6 +302,8 @@ class AtSpiApplication final : public std::enable_shared_from_this<AtSpiApplicat
|
||||
return mInitialized.load( std::memory_order_acquire ) && mConnection != nullptr;
|
||||
}
|
||||
|
||||
bool isInitialized() const { return mInitialized.load( std::memory_order_acquire ); }
|
||||
|
||||
bool hasActiveClients() const { return mHasActiveClients.load( std::memory_order_acquire ); }
|
||||
|
||||
void update() {
|
||||
@@ -1587,6 +1589,10 @@ class AtSpiAccessibilityBackend final : public AccessibilityBackend {
|
||||
|
||||
bool isAvailable() const { return mApplication && mApplication->isAvailable(); }
|
||||
|
||||
bool isInitializationComplete() const override {
|
||||
return mApplication && mApplication->isInitialized();
|
||||
}
|
||||
|
||||
bool hasActiveClients() const { return mApplication && mApplication->hasActiveClients(); }
|
||||
|
||||
void update() {
|
||||
|
||||
@@ -261,6 +261,10 @@ bool AccessibilityManager::isBackendAvailable() const {
|
||||
return mBackend && mBackend->isAvailable();
|
||||
}
|
||||
|
||||
bool AccessibilityManager::isBackendInitializationComplete() const {
|
||||
return mBackend && mBackend->isInitializationComplete();
|
||||
}
|
||||
|
||||
bool AccessibilityManager::hasActiveNativeClients() const {
|
||||
return mBackend && mBackend->hasActiveClients();
|
||||
}
|
||||
|
||||
@@ -104,14 +104,25 @@ EE_MAIN_FUNC int main( int argc, char** argv ) {
|
||||
|
||||
auto status = content->find<UITextView>( "status" );
|
||||
if ( benchmarkInactive ) {
|
||||
auto manager = scene->getAccessibilityManager();
|
||||
Clock clock;
|
||||
scene->getAccessibilityManager()->update();
|
||||
manager->update();
|
||||
const auto initializationUs = clock.getElapsedTime().asMicroseconds();
|
||||
clock.restart();
|
||||
if ( !std::getenv( "EEPP_DISABLE_ACCESSIBILITY" ) ) {
|
||||
while ( !manager->isBackendInitializationComplete() &&
|
||||
clock.getElapsedTime() < Seconds( 1 ) ) {
|
||||
Sys::sleep( Milliseconds( 1 ) );
|
||||
manager->update();
|
||||
}
|
||||
}
|
||||
const auto readinessUs = clock.getElapsedTime().asMicroseconds();
|
||||
clock.restart();
|
||||
for ( size_t i = 0; i < benchmarkIterations; ++i )
|
||||
status->setText( i & 1 ? "Ready" : "Idle" );
|
||||
const auto notificationsUs = clock.getElapsedTime().asMicroseconds();
|
||||
std::cout << "{\"initialization_us\":" << initializationUs
|
||||
<< ",\"readiness_us\":" << readinessUs
|
||||
<< ",\"iterations\":" << benchmarkIterations
|
||||
<< ",\"notifications_us\":" << notificationsUs << "}\n";
|
||||
return EXIT_SUCCESS;
|
||||
|
||||
@@ -210,6 +210,7 @@ UTEST( UIApplication, CreatesSecondaryWindowWithoutChangingAmbientScene ) {
|
||||
nullptr );
|
||||
app.getUI()->getAccessibilityManager()->update();
|
||||
EXPECT_FALSE( app.getUI()->getAccessibilityManager()->isBackendAvailable() );
|
||||
EXPECT_TRUE( app.getUI()->getAccessibilityManager()->isBackendInitializationComplete() );
|
||||
EXPECT_EQ( PixelDensity::getPixelDensity(), 1.5f );
|
||||
ASSERT_TRUE( app.getUI()->getUIIconThemeManager()->getCurrentTheme() != nullptr );
|
||||
EXPECT_TRUE( app.getUI()->getUIIconThemeManager()->findIcon( "go-up" ) != nullptr );
|
||||
|
||||
Reference in New Issue
Block a user