-GLobal progress lock
This commit is contained in:
tonikelope 2018-11-26 12:09:38 +01:00
parent 6455c35a4a
commit 4afc33da16
6 changed files with 92 additions and 63 deletions

View File

@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>com.tonikelope</groupId> <groupId>com.tonikelope</groupId>
<artifactId>MegaBasterd</artifactId> <artifactId>MegaBasterd</artifactId>
<version>5.70</version> <version>5.71</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<dependencies> <dependencies>
<dependency> <dependency>

View File

@ -44,7 +44,7 @@ public final class DownloadManager extends TransferenceManager {
if (((Download) d).isProvision_ok()) { if (((Download) d).isProvision_ok()) {
_total_transferences_size -= d.getFile_size(); increment_total_size(-1 * d.getFile_size());
delete_down.add(((Download) d).getUrl()); delete_down.add(((Download) d).getUrl());
} }
@ -106,7 +106,7 @@ public final class DownloadManager extends TransferenceManager {
if (download.isProvision_ok()) { if (download.isProvision_ok()) {
_total_transferences_size += download.getFile_size(); increment_total_size(download.getFile_size());
getTransference_waitstart_queue().add(download); getTransference_waitstart_queue().add(download);

View File

@ -48,7 +48,7 @@ import javax.swing.UIManager;
*/ */
public final class MainPanel { public final class MainPanel {
public static final String VERSION = "5.70"; public static final String VERSION = "5.71";
public static final int THROTTLE_SLICE_SIZE = 16 * 1024; public static final int THROTTLE_SLICE_SIZE = 16 * 1024;
public static final int DEFAULT_BYTE_BUFFER_SIZE = 16 * 1024; public static final int DEFAULT_BYTE_BUFFER_SIZE = 16 * 1024;
public static final int STREAMER_PORT = 1337; public static final int STREAMER_PORT = 1337;

View File

@ -23,6 +23,7 @@ public final class SpeedMeter implements Runnable {
private long _speed_counter; private long _speed_counter;
private long _speed_acumulator; private long _speed_acumulator;
private volatile long _max_avg_global_speed; private volatile long _max_avg_global_speed;
private final Object _speed_lock;
SpeedMeter(TransferenceManager trans_manager, JLabel sp_label, JLabel rem_label) { SpeedMeter(TransferenceManager trans_manager, JLabel sp_label, JLabel rem_label) {
_speed_label = sp_label; _speed_label = sp_label;
@ -32,6 +33,7 @@ public final class SpeedMeter implements Runnable {
_speed_counter = 0L; _speed_counter = 0L;
_speed_acumulator = 0L; _speed_acumulator = 0L;
_max_avg_global_speed = 0L; _max_avg_global_speed = 0L;
_speed_lock = new Object();
} }
private long _getAvgGlobalSpeed() { private long _getAvgGlobalSpeed() {
@ -40,6 +42,8 @@ public final class SpeedMeter implements Runnable {
public void attachTransference(Transference transference) { public void attachTransference(Transference transference) {
synchronized (_speed_lock) {
HashMap<String, Object> properties = new HashMap<>(); HashMap<String, Object> properties = new HashMap<>();
properties.put("last_progress", transference.getProgress()); properties.put("last_progress", transference.getProgress());
@ -48,12 +52,17 @@ public final class SpeedMeter implements Runnable {
_transferences.put(transference, properties); _transferences.put(transference, properties);
} }
}
public void detachTransference(Transference transference) { public void detachTransference(Transference transference) {
synchronized (_speed_lock) {
if (_transferences.containsKey(transference)) { if (_transferences.containsKey(transference)) {
_transferences.remove(transference); _transferences.remove(transference);
} }
}
} }
public long getMaxAvgGlobalSpeed() { public long getMaxAvgGlobalSpeed() {
@ -125,7 +134,7 @@ public final class SpeedMeter implements Runnable {
@Override @Override
public void run() { public void run() {
long global_speed, global_progress; long global_speed, global_progress, global_size;
boolean visible = false; boolean visible = false;
_speed_label.setVisible(true); _speed_label.setVisible(true);
@ -137,6 +146,8 @@ public final class SpeedMeter implements Runnable {
try { try {
synchronized (_speed_lock) {
if (!_transferences.isEmpty()) { if (!_transferences.isEmpty()) {
visible = true; visible = true;
@ -145,6 +156,8 @@ public final class SpeedMeter implements Runnable {
global_progress = 0L; global_progress = 0L;
global_size = _trans_manager.get_total_size();
for (Map.Entry<Transference, HashMap> trans_info : _transferences.entrySet()) { for (Map.Entry<Transference, HashMap> trans_info : _transferences.entrySet()) {
long trans_sp = calcTransferenceSpeed(trans_info.getKey(), trans_info.getValue()); long trans_sp = calcTransferenceSpeed(trans_info.getKey(), trans_info.getValue());
@ -190,12 +203,12 @@ public final class SpeedMeter implements Runnable {
_speed_label.setText(formatBytes(global_speed) + "/s"); _speed_label.setText(formatBytes(global_speed) + "/s");
_rem_label.setText(formatBytes(global_progress) + "/" + formatBytes(_trans_manager.getTotal_transferences_size()) + " @ " + formatBytes(avg_global_speed) + "/s @ " + calcRemTime((long) Math.floor((_trans_manager.getTotal_transferences_size() - global_progress) / avg_global_speed))); _rem_label.setText(formatBytes(global_progress) + "/" + formatBytes(global_size) + " @ " + formatBytes(avg_global_speed) + "/s @ " + calcRemTime((long) Math.floor((global_size - global_progress) / avg_global_speed)));
} else { } else {
_speed_label.setText("------"); _speed_label.setText("------");
_rem_label.setText(formatBytes(global_progress) + "/" + formatBytes(_trans_manager.getTotal_transferences_size()) + " @ --d --:--:--"); _rem_label.setText(formatBytes(global_progress) + "/" + formatBytes(global_size) + " @ --d --:--:--");
} }
@ -206,6 +219,8 @@ public final class SpeedMeter implements Runnable {
visible = false; visible = false;
} }
}
Thread.sleep(SLEEP); Thread.sleep(SLEEP);
} catch (InterruptedException ex) { } catch (InterruptedException ex) {

View File

@ -42,7 +42,8 @@ abstract public class TransferenceManager implements Runnable, SecureSingleThrea
private volatile boolean _preprocessing_transferences; private volatile boolean _preprocessing_transferences;
private volatile boolean _paused_all; private volatile boolean _paused_all;
private boolean _tray_icon_finish; private boolean _tray_icon_finish;
protected long _total_transferences_size; protected volatile long _total_size;
protected final Object _total_size_lock;
public TransferenceManager(MainPanel main_panel, int max_running_trans, javax.swing.JLabel status, javax.swing.JPanel scroll_panel, javax.swing.JButton close_all_button, javax.swing.JButton pause_all_button, javax.swing.MenuElement clean_all_menu) { public TransferenceManager(MainPanel main_panel, int max_running_trans, javax.swing.JLabel status, javax.swing.JPanel scroll_panel, javax.swing.JButton close_all_button, javax.swing.JButton pause_all_button, javax.swing.MenuElement clean_all_menu) {
_notified = false; _notified = false;
@ -59,8 +60,9 @@ abstract public class TransferenceManager implements Runnable, SecureSingleThrea
_close_all_button = close_all_button; _close_all_button = close_all_button;
_pause_all_button = pause_all_button; _pause_all_button = pause_all_button;
_clean_all_menu = clean_all_menu; _clean_all_menu = clean_all_menu;
_total_transferences_size = 0L; _total_size = 0L;
_secure_notify_lock = new Object(); _secure_notify_lock = new Object();
_total_size_lock = new Object();
_queue_sort_lock = new Object(); _queue_sort_lock = new Object();
_transference_preprocess_global_queue = new ConcurrentLinkedQueue<>(); _transference_preprocess_global_queue = new ConcurrentLinkedQueue<>();
_transference_waitstart_queue = new ConcurrentLinkedQueue<>(); _transference_waitstart_queue = new ConcurrentLinkedQueue<>();
@ -96,8 +98,20 @@ abstract public class TransferenceManager implements Runnable, SecureSingleThrea
_removing_transferences = removing; _removing_transferences = removing;
} }
public long getTotal_transferences_size() { public long get_total_size() {
return _total_transferences_size;
synchronized (_total_size_lock) {
return _total_size;
}
}
public void increment_total_size(long val) {
synchronized (_total_size_lock) {
_total_size += val;
}
} }
public boolean isProvisioning_transferences() { public boolean isProvisioning_transferences() {

View File

@ -40,7 +40,7 @@ public final class UploadManager extends TransferenceManager {
if (((Upload) upload).isProvision_ok()) { if (((Upload) upload).isProvision_ok()) {
_total_transferences_size += upload.getFile_size(); increment_total_size(upload.getFile_size());
getTransference_waitstart_queue().add(upload); getTransference_waitstart_queue().add(upload);
@ -102,7 +102,7 @@ public final class UploadManager extends TransferenceManager {
getTransference_finished_queue().remove(u); getTransference_finished_queue().remove(u);
_total_transferences_size -= u.getFile_size(); increment_total_size(-1 * u.getFile_size());
delete_up.add(new String[]{u.getFile_name(), ((Upload) u).getMa().getFull_email()}); delete_up.add(new String[]{u.getFile_name(), ((Upload) u).getMa().getFull_email()});
} }