chromium/chromeos/ui/wm/debug_util.h

// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROMEOS_UI_WM_DEBUG_UTIL_H_
#define CHROMEOS_UI_WM_DEBUG_UTIL_H_

#include <memory>
#include <optional>
#include <sstream>
#include <string>
#include <vector>

#include "base/component_export.h"
#include "base/functional/callback.h"
#include "base/memory/raw_ptr.h"
#include "ui/aura/window.h"

namespace chromeos::wm {

using GetChildrenCallback = base::RepeatingCallback<
    std::vector<raw_ptr<aura::Window, VectorExperimental>>(aura::Window*)>;

// Prints all windows hierarchy to `out`. If `scrub_data` is true, we
// may skip some data fields that are not very important for debugging. Returns
// a list of window titles. Window titles will be removed from `out` if
// `scrub_data` is true. `children_callback` can be provided to customize how
// child windows are structured under a window.
COMPONENT_EXPORT(CHROMEOS_UI_BASE)
std::vector<std::string> PrintWindowHierarchy(
    aura::Window::Windows roots,
    bool scrub_data,
    std::ostringstream* out,
    GetChildrenCallback children_callback = GetChildrenCallback());

}  // namespace chromeos::wm

#endif  // CHROMEOS_UI_WM_DEBUG_UTIL_H_