// 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(uint16 direct_children, uint16 tree_height) -> ();

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