|  | // Copyright 2017 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "base/process/process_handle.h" | 
|  |  | 
|  | #include <zircon/process.h> | 
|  | #include <zircon/status.h> | 
|  | #include <zircon/syscalls.h> | 
|  |  | 
|  | #include "base/logging.h" | 
|  |  | 
|  | namespace base { | 
|  |  | 
|  | ProcessId GetCurrentProcId() { | 
|  | return GetProcId(GetCurrentProcessHandle()); | 
|  | } | 
|  |  | 
|  | ProcessHandle GetCurrentProcessHandle() { | 
|  | // Note that zx_process_self() returns a real handle, and ownership is not | 
|  | // transferred to the caller (i.e. this should never be closed). | 
|  | return zx_process_self(); | 
|  | } | 
|  |  | 
|  | ProcessId GetProcId(ProcessHandle process) { | 
|  | zx_info_handle_basic_t basic; | 
|  | zx_status_t status = zx_object_get_info(process, ZX_INFO_HANDLE_BASIC, &basic, | 
|  | sizeof(basic), nullptr, nullptr); | 
|  | if (status != ZX_OK) { | 
|  | DLOG(ERROR) << "zx_object_get_info failed: " | 
|  | << zx_status_get_string(status); | 
|  | return ZX_KOID_INVALID; | 
|  | } | 
|  | return basic.koid; | 
|  | } | 
|  |  | 
|  | }  // namespace base |