mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 15:02:46 +00:00 
			
		
		
		
	 a29788e58a
			
		
	
	
		a29788e58a
		
	
	
	
	
		
			
			If you want to record perf events, just enable profiling. This allows us to add random perf events to programs without littering the file system with perfcore files.
		
			
				
	
	
		
			35 lines
		
	
	
	
		
			1,017 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
	
		
			1,017 B
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
 | |
|  *
 | |
|  * SPDX-License-Identifier: BSD-2-Clause
 | |
|  */
 | |
| 
 | |
| #include <Kernel/PerformanceEventBuffer.h>
 | |
| #include <Kernel/Process.h>
 | |
| 
 | |
| namespace Kernel {
 | |
| 
 | |
| KResultOr<FlatPtr> Process::sys$perf_event(int type, FlatPtr arg1, FlatPtr arg2)
 | |
| {
 | |
|     VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this)
 | |
|     auto* events_buffer = current_perf_events_buffer();
 | |
|     if (!events_buffer)
 | |
|         return KSuccess;
 | |
|     return events_buffer->append(type, arg1, arg2, nullptr);
 | |
| }
 | |
| 
 | |
| KResultOr<FlatPtr> Process::sys$perf_register_string(Userspace<char const*> user_string, size_t user_string_length)
 | |
| {
 | |
|     VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this)
 | |
|     auto* events_buffer = current_perf_events_buffer();
 | |
|     if (!events_buffer)
 | |
|         return KSuccess;
 | |
| 
 | |
|     auto string_or_error = try_copy_kstring_from_user(user_string, user_string_length);
 | |
|     if (string_or_error.is_error())
 | |
|         return string_or_error.error();
 | |
| 
 | |
|     return events_buffer->register_string(string_or_error.release_value());
 | |
| }
 | |
| 
 | |
| }
 |