Browse Source

[chore] Fixed a couple memory leaks using up ~15 MB each iteration

* DraVee: Some changes already applied on:
  "[vk] Fix fallback viewport/scissor origin handling (#294)"

Co-authored-by: Jarrod Norwell <official.antique@gmail.com>
Rebased-by: Caio Oliveira <caiooliveirafarias0@gmail.com>
pull/398/head
Gamer64 5 months ago
committed by crueter
parent
commit
272b26de1d
  1. 1
      src/android/app/build.gradle.kts
  2. 2
      src/android/gradle.properties
  3. 8
      src/common/announce_multiplayer_room.h
  4. 31
      src/common/heap_tracker.cpp
  5. 2
      src/core/frontend/applets/cabinet.h
  6. 20
      src/core/frontend/applets/software_keyboard.h
  7. 2
      src/core/hle/service/nfc/nfc_types.h
  8. 2
      src/core/hle/service/nfp/nfp_types.h
  9. 4
      src/core/hle/service/ns/platform_service_manager.cpp
  10. 2
      src/frontend_common/play_time_manager.h
  11. 2
      src/input_common/helpers/joycon_protocol/poller.cpp
  12. 2
      src/network/room_member.h
  13. 2
      src/video_core/control/scheduler.cpp
  14. 4
      src/video_core/renderer_vulkan/vk_rasterizer.cpp
  15. 2
      src/yuzu/applets/qt_amiibo_settings.cpp
  16. 8
      src/yuzu/configuration/configure_input.h
  17. 8
      src/yuzu/configuration/configure_input_player_widget.cpp
  18. 2
      src/yuzu/configuration/configure_input_player_widget.h
  19. 4
      src/yuzu/main_window.cpp
  20. 12
      src/yuzu/main_window.h
  21. 2
      src/yuzu/multiplayer/lobby_p.h

1
src/android/app/build.gradle.kts

@ -39,7 +39,6 @@ android {
buildFeatures { buildFeatures {
viewBinding = true viewBinding = true
buildConfig = true
} }
compileOptions { compileOptions {

2
src/android/gradle.properties

@ -14,6 +14,8 @@ android.useAndroidX=true
# Kotlin code style for this project: "official" or "obsolete": # Kotlin code style for this project: "official" or "obsolete":
kotlin.code.style=official kotlin.code.style=official
kotlin.parallel.tasks.in.project=true kotlin.parallel.tasks.in.project=true
android.defaults.buildfeatures.buildconfig=true
# Android Gradle plugin 8.0.2 # Android Gradle plugin 8.0.2
android.suppressUnsupportedCompileSdk=34 android.suppressUnsupportedCompileSdk=34
android.native.buildOutput=verbose android.native.buildOutput=verbose

8
src/common/announce_multiplayer_room.h

@ -34,8 +34,8 @@ struct Member {
struct RoomInformation { struct RoomInformation {
std::string name; ///< Name of the server std::string name; ///< Name of the server
std::string description; ///< Server description std::string description; ///< Server description
u32 member_slots; ///< Maximum number of members in this room
u16 port; ///< The port of this room
u32 member_slots{}; ///< Maximum number of members in this room
u16 port{}; ///< The port of this room
GameInfo preferred_game; ///< Game to advertise that you want to play GameInfo preferred_game; ///< Game to advertise that you want to play
std::string host_username; ///< Forum username of the host std::string host_username; ///< Forum username of the host
}; };
@ -46,8 +46,8 @@ struct Room {
std::string id; std::string id;
std::string verify_uid; ///< UID used for verification std::string verify_uid; ///< UID used for verification
std::string ip; std::string ip;
u32 net_version;
bool has_password;
u32 net_version{};
bool has_password = false;
std::vector<Member> members; std::vector<Member> members;
}; };

31
src/common/heap_tracker.cpp

@ -46,14 +46,13 @@ void HeapTracker::Map(size_t virtual_offset, size_t host_offset, size_t length,
// We are mapping part of a separate heap. // We are mapping part of a separate heap.
std::scoped_lock lk{m_lock}; std::scoped_lock lk{m_lock};
auto* const map = new SeparateHeapMap{
.vaddr = virtual_offset,
.paddr = host_offset,
.size = length,
.tick = m_tick++,
.perm = perm,
.is_resident = false,
};
std::unique_ptr<SeparateHeapMap> map;
map->vaddr = virtual_offset;
map->paddr = host_offset;
map->size = length;
map->tick = m_tick++;
map->perm = perm;
map->is_resident = false;
// Insert into mappings. // Insert into mappings.
m_map_count++; m_map_count++;
@ -250,15 +249,13 @@ void HeapTracker::SplitHeapMapLocked(VAddr offset) {
const size_t left_size = offset - left->vaddr; const size_t left_size = offset - left->vaddr;
left->size = left_size; left->size = left_size;
// Create the new right map.
auto* const right = new SeparateHeapMap{
.vaddr = left->vaddr + left_size,
.paddr = left->paddr + left_size,
.size = orig_size - left_size,
.tick = left->tick,
.perm = left->perm,
.is_resident = left->is_resident,
};
std::unique_ptr<SeparateHeapMap> right;
right->vaddr = left->vaddr + left_size;
right->paddr = left->paddr + left_size;
right->size = orig_size - left_size;
right->tick = left->tick;
right->perm = left->perm;
right->is_resident = left->is_resident;
// Insert the new right map. // Insert the new right map.
m_map_count++; m_map_count++;

2
src/core/frontend/applets/cabinet.h

@ -21,7 +21,7 @@ namespace Core::Frontend {
struct CabinetParameters { struct CabinetParameters {
Service::NFP::TagInfo tag_info; Service::NFP::TagInfo tag_info;
Service::NFP::RegisterInfo register_info; Service::NFP::RegisterInfo register_info;
Service::NFP::CabinetMode mode;
Service::NFP::CabinetMode mode{};
}; };
using CabinetCallback = std::function<void(bool, const std::string&)>; using CabinetCallback = std::function<void(bool, const std::string&)>;

20
src/core/frontend/applets/software_keyboard.h

@ -20,9 +20,9 @@ struct KeyboardInitializeParameters {
std::u16string initial_text; std::u16string initial_text;
char16_t left_optional_symbol_key; char16_t left_optional_symbol_key;
char16_t right_optional_symbol_key; char16_t right_optional_symbol_key;
u32 max_text_length;
u32 min_text_length;
s32 initial_cursor_position;
u32 max_text_length{};
u32 min_text_length{};
s32 initial_cursor_position{};
Service::AM::Frontend::SwkbdType type; Service::AM::Frontend::SwkbdType type;
Service::AM::Frontend::SwkbdPasswordMode password_mode; Service::AM::Frontend::SwkbdPasswordMode password_mode;
Service::AM::Frontend::SwkbdTextDrawType text_draw_type; Service::AM::Frontend::SwkbdTextDrawType text_draw_type;
@ -34,12 +34,12 @@ struct KeyboardInitializeParameters {
}; };
struct InlineAppearParameters { struct InlineAppearParameters {
u32 max_text_length;
u32 min_text_length;
f32 key_top_scale_x;
f32 key_top_scale_y;
f32 key_top_translate_x;
f32 key_top_translate_y;
u32 max_text_length{};
u32 min_text_length{};
f32 key_top_scale_x{};
f32 key_top_scale_y{};
f32 key_top_translate_x{};
f32 key_top_translate_y{};
Service::AM::Frontend::SwkbdType type; Service::AM::Frontend::SwkbdType type;
Service::AM::Frontend::SwkbdKeyDisableFlags key_disable_flags; Service::AM::Frontend::SwkbdKeyDisableFlags key_disable_flags;
bool key_top_as_floating; bool key_top_as_floating;
@ -50,7 +50,7 @@ struct InlineAppearParameters {
struct InlineTextParameters { struct InlineTextParameters {
std::u16string input_text; std::u16string input_text;
s32 cursor_position;
s32 cursor_position{};
}; };
class SoftwareKeyboardApplet : public Applet { class SoftwareKeyboardApplet : public Applet {

2
src/core/hle/service/nfc/nfc_types.h

@ -79,7 +79,7 @@ using DeviceHandle = u64;
// This is nn::nfc::TagInfo // This is nn::nfc::TagInfo
struct TagInfo { struct TagInfo {
UniqueSerialNumber uuid;
UniqueSerialNumber uuid{};
u8 uuid_length; u8 uuid_length;
INSERT_PADDING_BYTES(0x15); INSERT_PADDING_BYTES(0x15);
NfcProtocol protocol; NfcProtocol protocol;

2
src/core/hle/service/nfp/nfp_types.h

@ -315,7 +315,7 @@ static_assert(sizeof(ModelInfo) == 0x40, "ModelInfo is an invalid size");
// This is nn::nfp::RegisterInfo // This is nn::nfp::RegisterInfo
struct RegisterInfo { struct RegisterInfo {
Service::Mii::CharInfo mii_char_info; Service::Mii::CharInfo mii_char_info;
WriteDate creation_date;
WriteDate creation_date{};
AmiiboName amiibo_name; AmiiboName amiibo_name;
u8 font_region; u8 font_region;
INSERT_PADDING_BYTES(0x7A); INSERT_PADDING_BYTES(0x7A);

4
src/core/hle/service/ns/platform_service_manager.cpp

@ -164,7 +164,7 @@ IPlatformServiceManager::IPlatformServiceManager(Core::System& system_, const ch
// Rebuild shared fonts from data ncas or synthesize // Rebuild shared fonts from data ncas or synthesize
impl->shared_font = std::make_shared<Kernel::PhysicalMemory>(SHARED_FONT_MEM_SIZE); impl->shared_font = std::make_shared<Kernel::PhysicalMemory>(SHARED_FONT_MEM_SIZE);
for (auto font : SHARED_FONTS) {
for (auto& font : SHARED_FONTS) {
FileSys::VirtualFile romfs; FileSys::VirtualFile romfs;
const auto nca = const auto nca =
nand->GetEntry(static_cast<u64>(font.first), FileSys::ContentRecordType::Data); nand->GetEntry(static_cast<u64>(font.first), FileSys::ContentRecordType::Data);
@ -261,7 +261,7 @@ Result IPlatformServiceManager::GetSharedFontInOrderOfPriority(
out_font_sizes.size(), impl->shared_font_regions.size()}); out_font_sizes.size(), impl->shared_font_regions.size()});
for (size_t i = 0; i < max_size; i++) { for (size_t i = 0; i < max_size; i++) {
auto region = impl->GetSharedFontRegion(i);
auto& region = impl->GetSharedFontRegion(i);
out_font_codes[i] = static_cast<u32>(i); out_font_codes[i] = static_cast<u32>(i);
out_font_offsets[i] = region.offset; out_font_offsets[i] = region.offset;

2
src/frontend_common/play_time_manager.h

@ -48,7 +48,7 @@ private:
void Save(); void Save();
PlayTimeDatabase database; PlayTimeDatabase database;
u64 running_program_id;
u64 running_program_id{};
std::jthread play_time_thread; std::jthread play_time_thread;
}; };

2
src/input_common/helpers/joycon_protocol/poller.cpp

@ -13,7 +13,7 @@ JoyconPoller::JoyconPoller(ControllerType device_type_, JoyStickCalibration left
right_stick_calibration{right_stick_calibration_}, motion_calibration{motion_calibration_} {} right_stick_calibration{right_stick_calibration_}, motion_calibration{motion_calibration_} {}
void JoyconPoller::SetCallbacks(const JoyconCallbacks& callbacks_) { void JoyconPoller::SetCallbacks(const JoyconCallbacks& callbacks_) {
callbacks = std::move(callbacks_);
callbacks = callbacks_;
} }
void JoyconPoller::ReadActiveMode(std::span<u8> buffer, const MotionStatus& motion_status, void JoyconPoller::ReadActiveMode(std::span<u8> buffer, const MotionStatus& motion_status,

2
src/network/room_member.h

@ -53,7 +53,7 @@ struct ChatEntry {
/// Represents a system status message. /// Represents a system status message.
struct StatusMessageEntry { struct StatusMessageEntry {
StatusMessageTypes type; ///< Type of the message
StatusMessageTypes type{}; ///< Type of the message
/// Subject of the message. i.e. the user who is joining/leaving/being banned, etc. /// Subject of the message. i.e. the user who is joining/leaving/being banned, etc.
std::string nickname; std::string nickname;
std::string username; std::string username;

2
src/video_core/control/scheduler.cpp

@ -17,7 +17,7 @@ void Scheduler::Push(s32 channel, CommandList&& entries) {
std::unique_lock lk(scheduling_guard); std::unique_lock lk(scheduling_guard);
auto it = channels.find(channel); auto it = channels.find(channel);
ASSERT(it != channels.end()); ASSERT(it != channels.end());
auto channel_state = it->second;
auto& channel_state = it->second;
gpu.BindChannel(channel_state->bind_id); gpu.BindChannel(channel_state->bind_id);
channel_state->dma_pusher->Push(std::move(entries)); channel_state->dma_pusher->Push(std::move(entries));
channel_state->dma_pusher->DispatchCalls(); channel_state->dma_pusher->DispatchCalls();

4
src/video_core/renderer_vulkan/vk_rasterizer.cpp

@ -109,7 +109,7 @@ VkViewport GetViewportState(const Device& device, const Maxwell& regs, size_t in
VkRect2D GetScissorState(const Maxwell& regs, size_t index, u32 up_scale = 1, u32 down_shift = 0) { VkRect2D GetScissorState(const Maxwell& regs, size_t index, u32 up_scale = 1, u32 down_shift = 0) {
const auto& src = regs.scissor_test[index]; const auto& src = regs.scissor_test[index];
VkRect2D scissor;
VkRect2D scissor{};
const auto scale_up = [&](s32 value) -> s32 { const auto scale_up = [&](s32 value) -> s32 {
if (value == 0) { if (value == 0) {
return 0U; return 0U;
@ -392,7 +392,7 @@ void RasterizerVulkan::Clear(u32 layer_count) {
} }
UpdateViewportsState(regs); UpdateViewportsState(regs);
VkRect2D default_scissor;
VkRect2D default_scissor{};
default_scissor.offset.x = 0; default_scissor.offset.x = 0;
default_scissor.offset.y = 0; default_scissor.offset.y = 0;
default_scissor.extent.width = (std::numeric_limits<s32>::max)(); default_scissor.extent.width = (std::numeric_limits<s32>::max)();

2
src/yuzu/applets/qt_amiibo_settings.cpp

@ -267,7 +267,7 @@ void QtAmiiboSettings::ShowCabinetApplet(
const Core::Frontend::CabinetCallback& callback_, const Core::Frontend::CabinetCallback& callback_,
const Core::Frontend::CabinetParameters& parameters, const Core::Frontend::CabinetParameters& parameters,
std::shared_ptr<Service::NFC::NfcDevice> nfp_device) const { std::shared_ptr<Service::NFC::NfcDevice> nfp_device) const {
callback = std::move(callback_);
callback = callback_;
emit MainWindowShowAmiiboSettings(parameters, nfp_device); emit MainWindowShowAmiiboSettings(parameters, nfp_device);
} }

8
src/yuzu/configuration/configure_input.h

@ -71,11 +71,11 @@ private:
std::unique_ptr<InputProfiles> profiles; std::unique_ptr<InputProfiles> profiles;
std::array<ConfigureInputPlayer*, 8> player_controllers;
std::array<QWidget*, 8> player_tabs;
std::array<ConfigureInputPlayer*, 8> player_controllers{};
std::array<QWidget*, 8> player_tabs{};
// Checkboxes representing the "Connected Controllers". // Checkboxes representing the "Connected Controllers".
std::array<QCheckBox*, 8> connected_controller_checkboxes;
ConfigureInputAdvanced* advanced;
std::array<QCheckBox*, 8> connected_controller_checkboxes{};
ConfigureInputAdvanced* advanced = nullptr;
Core::System& system; Core::System& system;
}; };

8
src/yuzu/configuration/configure_input_player_widget.cpp

@ -689,10 +689,10 @@ void PlayerControlPreview::DrawHandheldController(QPainter& p, const QPointF cen
{ {
// Draw joysticks // Draw joysticks
using namespace Settings::NativeAnalog; using namespace Settings::NativeAnalog;
const auto l_stick = QPointF(stick_values[LStick].x.value, stick_values[LStick].y.value);
const auto l_button = button_values[Settings::NativeButton::LStick];
const auto r_stick = QPointF(stick_values[RStick].x.value, stick_values[RStick].y.value);
const auto r_button = button_values[Settings::NativeButton::RStick];
const auto& l_stick = QPointF(stick_values[LStick].x.value, stick_values[LStick].y.value);
const auto& l_button = button_values[Settings::NativeButton::LStick];
const auto& r_stick = QPointF(stick_values[RStick].x.value, stick_values[RStick].y.value);
const auto& r_button = button_values[Settings::NativeButton::RStick];
DrawJoystick(p, center + QPointF(-171, -41) + (l_stick * 4), 1.0f, l_button); DrawJoystick(p, center + QPointF(-171, -41) + (l_stick * 4), 1.0f, l_button);
DrawJoystick(p, center + QPointF(171, 8) + (r_stick * 4), 1.0f, r_button); DrawJoystick(p, center + QPointF(171, 8) + (r_stick * 4), 1.0f, r_button);

2
src/yuzu/configuration/configure_input_player_widget.h

@ -214,7 +214,7 @@ private:
bool mapping_active{}; bool mapping_active{};
int blink_counter{}; int blink_counter{};
int callback_key;
int callback_key{};
QColor button_color{}; QColor button_color{};
ColorMapping colors{}; ColorMapping colors{};
Core::HID::LedPattern led_pattern{0, 0, 0, 0}; Core::HID::LedPattern led_pattern{0, 0, 0, 0};

4
src/yuzu/main_window.cpp

@ -1495,7 +1495,7 @@ void MainWindow::OnAppFocusStateChanged(Qt::ApplicationState state) {
(state & (Qt::ApplicationHidden | Qt::ApplicationInactive))) { (state & (Qt::ApplicationHidden | Qt::ApplicationInactive))) {
auto_paused = true; auto_paused = true;
OnPauseGame(); OnPauseGame();
} else if (!emu_thread->IsRunning() && auto_paused && state == Qt::ApplicationActive) {
} else if (!emu_thread->IsRunning() && auto_paused && (state & Qt::ApplicationActive)) {
auto_paused = false; auto_paused = false;
OnStartGame(); OnStartGame();
} }
@ -1505,7 +1505,7 @@ void MainWindow::OnAppFocusStateChanged(Qt::ApplicationState state) {
(state & (Qt::ApplicationHidden | Qt::ApplicationInactive))) { (state & (Qt::ApplicationHidden | Qt::ApplicationInactive))) {
Settings::values.audio_muted = true; Settings::values.audio_muted = true;
auto_muted = true; auto_muted = true;
} else if (auto_muted && state == Qt::ApplicationActive) {
} else if (auto_muted && (state & Qt::ApplicationActive)) {
Settings::values.audio_muted = false; Settings::values.audio_muted = false;
auto_muted = false; auto_muted = false;
} }

12
src/yuzu/main_window.h

@ -482,13 +482,13 @@ private:
MultiplayerState* multiplayer_state = nullptr; MultiplayerState* multiplayer_state = nullptr;
GRenderWindow* render_window;
GameList* game_list;
LoadingScreen* loading_screen;
GRenderWindow* render_window = nullptr;
GameList* game_list = nullptr;
LoadingScreen* loading_screen = nullptr;
QTimer shutdown_timer; QTimer shutdown_timer;
OverlayDialog* shutdown_dialog{}; OverlayDialog* shutdown_dialog{};
GameListPlaceholder* game_list_placeholder;
GameListPlaceholder* game_list_placeholder = nullptr;
std::vector<VkDeviceInfo::Record> vk_device_records; std::vector<VkDeviceInfo::Record> vk_device_records;
@ -531,7 +531,7 @@ private:
QString startup_icon_theme; QString startup_icon_theme;
// Debugger panes // Debugger panes
ControllerDialog* controller_dialog;
ControllerDialog* controller_dialog = nullptr;
QAction* actions_recent_files[max_recent_files_item]; QAction* actions_recent_files[max_recent_files_item];
@ -543,7 +543,7 @@ private:
QTranslator translator; QTranslator translator;
// Install progress dialog // Install progress dialog
QProgressDialog* install_progress;
QProgressDialog* install_progress = nullptr;
// Last game booted, used for multi-process apps // Last game booted, used for multi-process apps
QString last_filename_booted; QString last_filename_booted;

2
src/yuzu/multiplayer/lobby_p.h

@ -175,7 +175,7 @@ public:
private: private:
QString username; QString username;
QString nickname; QString nickname;
u64 title_id;
u64 title_id{};
QString game_name; QString game_name;
}; };

Loading…
Cancel
Save