Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1a1d0e37 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "IA2: Split out mainloop handler sync for tests" into main

parents 68c57ca0 153116a2
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -490,10 +490,16 @@ filegroup {
filegroup {
    name: "TestCommonMainHandler",
    srcs: [
        ":TestCommonSyncMainHandler",
        "common/main_handler.cc",
    ],
}

filegroup {
    name: "TestCommonSyncMainHandler",
    srcs: ["common/sync_main_handler.cc"],
}

filegroup {
    name: "TestCommonInitFlags",
    srcs: [
+0 −9
Original line number Diff line number Diff line
@@ -68,12 +68,3 @@ void main_thread_shut_down() { main_thread.ShutDown(); }

// osi_alarm
bluetooth::common::MessageLoopThread* get_main_thread() { return &main_thread; }

int sync_timeout_in_ms = 3000;

void sync_main_handler() {
  std::promise promise = std::promise<void>();
  std::future future = promise.get_future();
  post_on_bt_main([&promise]() { promise.set_value(); });
  future.wait_for(std::chrono::milliseconds(sync_timeout_in_ms));
};
+29 −0
Original line number Diff line number Diff line
/*
 * Copyright 2023 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include <chrono>
#include <future>

#include "stack/include/main_thread.h"

constexpr int sync_timeout_in_ms = 3000;

void sync_main_handler() {
  std::promise promise = std::promise<void>();
  std::future future = promise.get_future();
  post_on_bt_main([&promise]() { promise.set_value(); });
  future.wait_for(std::chrono::milliseconds(sync_timeout_in_ms));
};
+30 −0
Original line number Diff line number Diff line
/*
 * Copyright 2023 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#pragma once

// Synchronize main handler for tests
//
// NOTE: This mechanism works ONLY when it is known that a single unit
// of execution under test does not spawn or otherwise extend entries
// into the main loop execution queue.
//
// If the execution under test reposts additional execution units to
// the main loop queue then this synchronization mechanism is unreliable
// and alternative methods must be used to properly sync within the
// multithreaded environment.

void sync_main_handler();