// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library test.componentmanager.stresstests;

/// The way for parent to conrtol lifecycle of its child in a stress test.
@discoverable
protocol ChildRealm {
    /// Component will gracefully exit.
    Stop();

    StopChildren() -> ();

    /// Create nested children in this realm.
    /// `direct_children` - Num of direct children of this realm.
    /// `tree_height` - Height of the realm tree to create.
    /// Returns once all children are running.
    CreateChildren(struct {
        direct_children uint16;
        tree_height uint16;
    }) -> ();

    /// Fired when the server is connected
    -> OnConnected();
};
