Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 11 additions & 2 deletions java/rust/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,10 @@ pub extern "system" fn Java_dev_misieur_packobf_Native_optimizeZip<'caller>(
corrupt_png_files: env
.get_field(&options, jni_str!("corruptPngFiles"), jni_sig!("Z"))?
.z()?,
num_threads: Some(
env.get_field(&options, jni_str!("numThreads"), jni_sig!("I"))?
.i()? as usize,
),
}
};

Expand Down Expand Up @@ -119,12 +123,17 @@ pub extern "system" fn Java_dev_misieur_packobf_Native_optimizeZip<'caller>(
total: t,
} => (1, c as i32, t as i32, None),
Progress::Parsing { current: s } => (2, 0, 0, Some(s)),
Progress::Building {
Progress::Optimizing {
current: s,
index: i,
total: t,
} => (3, i as i32, t as i32, Some(s)),
Progress::Done => (4, 0, 0, None),
Progress::Building {
current: s,
index: i,
total: t,
} => (4, i as i32, t as i32, Some(s)),
Progress::Done => (5, 0, 0, None),
};

let _ = env.with_local_frame(16, |env| {
Expand Down
4 changes: 3 additions & 1 deletion java/src/main/java/dev/misieur/packobf/Native.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,19 +14,21 @@ private Native() {

static class Options {

public Options(int compression, int shaderCompression, boolean renameFiles, boolean blockUnzipping, boolean corruptPngFiles) {
public Options(int compression, int shaderCompression, boolean renameFiles, boolean blockUnzipping, boolean corruptPngFiles, int numThreads) {
this.compression = compression;
this.shaderCompression = shaderCompression;
this.renameFiles = renameFiles;
this.blockUnzipping = blockUnzipping;
this.corruptPngFiles = corruptPngFiles;
this.numThreads = numThreads;
}

public int compression;
public int shaderCompression;
public boolean renameFiles;
public boolean blockUnzipping;
public boolean corruptPngFiles;
public int numThreads;
}

interface LogCallback {
Expand Down
3 changes: 2 additions & 1 deletion java/src/main/java/dev/misieur/packobf/PackOBF.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ public static byte[] optimizeZip(
options.shaderCompression().value,
options.renameFiles(),
options.blockUnzipping(),
options.corruptPngFiles()
options.corruptPngFiles(),
options.numThreads() != null ? options.numThreads() : 0
),
(level, message) -> logCallback.onLog(switch (level) {
case 0 -> LogLevel.INFO;
Expand Down
4 changes: 3 additions & 1 deletion java/src/main/java/dev/misieur/packobf/options/Options.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package dev.misieur.packobf.options;

public record Options(Compression compression, ShaderCompression shaderCompression, boolean renameFiles, boolean blockUnzipping, boolean corruptPngFiles) {
import dev.misieur.packobf.annotations.Nullable;

public record Options(Compression compression, ShaderCompression shaderCompression, boolean renameFiles, boolean blockUnzipping, boolean corruptPngFiles, @Nullable Integer numThreads) {
public static Options simplest() {
return new Options(
Compression.SIMPLEST,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package dev.misieur.packobf.progress;

public final class OptimizingProgress extends Progress {
/**
* The total number of files to optimize
*/
private final int total;
/**
* The current file that PackOBF started to optimize
*/
private final Current current;

public OptimizingProgress(int total, Current current) {
this.total = total;
this.current = current;
}

public int total() {
return total;
}

public Current current() {
return current;
}

@Override
public State state() {
return State.OPTIMIZING;
}

public record Current(String name, int index) {
}
}
7 changes: 4 additions & 3 deletions java/src/main/java/dev/misieur/packobf/progress/Progress.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package dev.misieur.packobf.progress;

public abstract sealed class Progress permits BuildingProgress, DoneProgress, IdleProgress, ParsingProgress, ReadingZipProgress {
public abstract sealed class Progress permits IdleProgress, ReadingZipProgress, ParsingProgress, OptimizingProgress, BuildingProgress, DoneProgress {
private State state;

public abstract State state();
Expand All @@ -9,8 +9,9 @@ public enum State {
IDLE(0),
READING_ZIP(1),
PARSING(2),
BUILDING(3),
DONE(4);
OPTIMIZING(3),
BUILDING(4),
DONE(5);

private final int value;

Expand Down
8 changes: 6 additions & 2 deletions packobf/src/file_parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ use crate::{get_type, parse_path, LogMessage, Progress};
use rayon::iter::{IntoParallelRefMutIterator, ParallelIterator};
use std::str::FromStr;
use std::sync::Arc;
use rayon::ThreadPool;
use tokio::sync::mpsc::UnboundedSender;
use tokio::sync::watch::Sender;
use crate::resource_pack::files::unknowntexture::UnknownTexture;
Expand All @@ -25,9 +26,12 @@ pub fn parse_resource_pack_files(
entries: &mut Vec<(String, Vec<u8>)>,
progress: Sender<Progress>,
pack: Arc<ResourcePack>,
thread_pool: &ThreadPool
) {
entries.par_iter_mut().for_each(move |(name, content)| {
parse_resource_pack_file(logger, &progress, &pack, name, content);
thread_pool.install(|| {
entries.par_iter_mut().for_each(move |(name, content)| {
parse_resource_pack_file(logger, &progress, &pack, name, content);
});
});
}

Expand Down
Loading
Loading