blob: 3dfd938e935a7db5f550adc2287d1e15e8fe3b6a [file] [log] [blame]
// Copyright 2016 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.
#ifndef SRC_LIB_FSL_HANDLES_OBJECT_INFO_H_
#define SRC_LIB_FSL_HANDLES_OBJECT_INFO_H_
#include <lib/zx/time.h>
#include <zircon/syscalls/object.h>
#include <zircon/types.h>
#include <functional>
#include <string>
#include <utility>
#include "src/lib/fxl/fxl_export.h"
namespace fsl {
// Gets the kernel object id (koid) of the object associated with the handle.
// Returns |ZX_KOID_INVALID| if the handle is invalid.
FXL_EXPORT zx_koid_t GetKoid(zx_handle_t handle);
// Gets the kernel object id (koid) of the object related to the object
// associated with the handle. For example, if the object associated with the
// handle is a channel, this function returns the koid of the channel object at
// the opposite end.
//
// Returns |ZX_KOID_INVALID| if the handle is invalid or the object associated
// with the handle has no related object.
//
// Note that closing all of the handles to the related object will not free it
// immediately, as long as handles to its partner remain. The return value will
// still be a valid koid in this case.
FXL_EXPORT zx_koid_t GetRelatedKoid(zx_handle_t handle);
// Gets the kernel object ids (koids) of the object associated with the handle
// and of the object related to the handle's object.
//
// For example, if the object associated with the handle is an eventpair, this
// function returns the koids of each end.
//
// The return value is as if std::pair(GetKoid(), GetRelatedKoid()) was called.
//
// The first slot of the std::pair contains |ZX_KOID_INVALID| if the handle is
// invalid. The second slot of the std::pair contains |ZX_KOID_INVALID| if the
// handle is invalid, or the object associated with the handle has no related
// object.
//
// Note that closing all of the handles to the related object will not free it
// immediately, as long as handles to its partner remain. The second slot of
// the std::pair will contain a valid koid in this case.
FXL_EXPORT std::pair<zx_koid_t, zx_koid_t> GetKoids(zx_handle_t handle);
// Gets the type of a kernel object.
FXL_EXPORT zx_obj_type_t GetType(zx_handle_t handle);
// Gets the name of a kernel object.
FXL_EXPORT std::string GetObjectName(zx_handle_t handle);
// Sets the name of a kernel object.
// Note: The kernel truncates names to |ZX_MAX_NAME_LEN|.
FXL_EXPORT zx_status_t SetObjectName(zx_handle_t handle, const std::string& name);
// Sets the name of a kernel object if it is currently unset or the |replace| function returns true
// when passed the current name. For example, a caller may choose to only set the name if its
// current name begins with "Sysmem". Returns true iff the name was set successfully.
FXL_EXPORT bool MaybeSetObjectName(
zx_handle_t handle, const std::string& name,
std::function<bool(std::string)> replace = [](std::string current_name) { return false; });
// Gets the kernel object id of the current process.
FXL_EXPORT zx_koid_t GetCurrentProcessKoid();
// Gets the current process name.
FXL_EXPORT std::string GetCurrentProcessName();
// Gets the kernel object id of the current thread.
FXL_EXPORT zx_koid_t GetCurrentThreadKoid();
// Gets the current thread name.
FXL_EXPORT std::string GetCurrentThreadName();
// Sets the name of the current thread.
// Note: The kernel truncates names to |ZX_MAX_NAME_LEN|.
FXL_EXPORT zx_status_t SetCurrentThreadName(const std::string& name);
// Gets the total runtime of the current thread.
FXL_EXPORT zx::duration GetCurrentThreadTotalRuntime();
// Gets the total size of mapped memory ranges in the current process in bytes.
// Not all will be backed by physical memory.
FXL_EXPORT size_t GetCurrentProcessMemoryMappedBytes();
// Gets the committed memory that is only mapped into the current process in
// bytes.
FXL_EXPORT size_t GetCurrentProcessMemoryPrivateBytes();
// Gets the committed memory that is mapped into the current process and at
// least one other process.
FXL_EXPORT size_t GetCurrentProcessMemorySharedBytes();
// Gets a number that estimates the fraction of shared bytes that the current
// process is responsible for keeping alive.
FXL_EXPORT size_t GetCurrentProcessMemoryScaledSharedBytes();
} // namespace fsl
#endif // SRC_LIB_FSL_HANDLES_OBJECT_INFO_H_