Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
recolic-hust
hust-x86-simulator
Commits
e48eb1ea
Verified
Commit
e48eb1ea
authored
Jan 03, 2020
by
Recolic Keghart
Browse files
add option to disable async render
parent
cbd90a84
Pipeline
#816
passed with stages
in 11 minutes and 14 seconds
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
nemu/src/device/device.cc
View file @
e48eb1ea
...
...
@@ -41,11 +41,6 @@ static void timer_sig_handler(int signum) {
}
void
device_update_impl
()
{
// async
if
(
device_update_flag
)
device_update_flag
=
false
;
else
return
;
if
(
update_screen_flag
)
{
update_screen
();
update_screen_flag
=
false
;
...
...
@@ -75,9 +70,16 @@ void device_update_impl() {
}
}
void
device_update
()
{
device_update_impl
();}
void
device_update
()
{
#ifdef ENABLE_ASYNC_RENDER
#else
if
(
device_update_flag
.
exchange
(
false
))
{
device_update_impl
();
}
#endif
}
static
void
device_update_thread_daemon
()
{
[[
maybe_unused
]]
static
void
device_update_thread_daemon
()
{
while
(
true
)
{
if
(
device_update_flag
.
exchange
(
false
))
{
device_update_impl
();
...
...
@@ -109,7 +111,9 @@ void init_device() {
ret
=
setitimer
(
ITIMER_VIRTUAL
,
&
it
,
NULL
);
Assert
(
ret
==
0
,
"Can not set timer"
);
// std::thread(device_update_thread_daemon).detach();
#ifdef ENABLE_ASYNC_RENDER
std
::
thread
(
device_update_thread_daemon
).
detach
();
#endif
}
#else
...
...
nemu/src/device/vga.cc
View file @
e48eb1ea
...
...
@@ -40,7 +40,9 @@ static void init_vga_impl() {
void
update_screen
()
{
#ifndef DISABLE_MMIO
// if(window == nullptr) init_vga_impl();
#ifdef ENABLE_ASYNC_RENDER
if
(
window
==
nullptr
)
init_vga_impl
();
#endif
SDL_ErrorCheck
(
SDL_UpdateTexture
(
texture
,
NULL
,
vmem
,
SCREEN_W
*
sizeof
(
vmem
[
0
][
0
])));
SDL_ErrorCheck
(
SDL_RenderClear
(
renderer
));
SDL_ErrorCheck
(
SDL_RenderCopy
(
renderer
,
texture
,
NULL
,
NULL
));
...
...
@@ -49,9 +51,12 @@ void update_screen() {
}
void
init_vga
()
{
#ifdef ENABLE_ASYNC_RENDER
// Because of fucking SDL design, vga_init should be done in updating thread.
// Do nothing in main thread.
#else
init_vga_impl
();
#endif
}
#endif
/* HAS_IOE */
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment