Ideal laptop for performances

Hi Everyone!

I’ve been doing processing for awhile, and I am scaling up my projects. I recently got into a group art show, and to have my code run in a gallery space for eight hours a day, 6 days a week for up to 6 months.

I’ve got a budget (up to 1500) to get an new laptop for the art show. I’ve got a MacBook Pro, at 16gb of ram, 2.3 GHz Dual-Core Intel Core i5, and Intel Iris Plus Graphics 640 1536 MB

My ideal laptop should be able to run code smoothly, take in sound (smoothly), no lag at 60 fps and hopefully be around for future projects.

All advice is greatly appreciated!

Happy holidays
Manu

1 Like

I’ve found this list for Macs on NewEgg.com; but they’re all refurbished::apple:
Refurbished Apple MacBooks

Generally, performance on a budget you’d only find on non-Apple PCs: :smiling_imp:
Brand New Non-Apple PC gaming laptops

2 Likes

Thanks GoToLoop. These links are helpful!

Follow up question:
If budget wasn’t an issue, any laptop recommendations for performance?

Got none in mind, sorry. :confounded:

For graphics performance, most important is a dedicated graphics card w/ high memory bandwidth. :racing_car:

Just change the “Price” filter in order to see better gaming laptop options. :bulb:

1 Like

I can confirm this. My laptop doesn’t have a proper graphic card and I can’t go all out in my sketches. Especially complex 3D sketches pose a problem. It also gets hot if I run complex sketches for too long, so I need to use a laptop cooler (which works great, but a downside is that it makes a bit of noise).

I’m not familiar with pc hardware so can’t give you reliable advice there, but I would search this forum. Looking for terms such as ‘framerate drop’ and ‘slow framerate’ might help you to make an inventory of what’s causing slow sketches.
Although some of these issues can be solved by making the code more efficient, it gives you an idea of which type of sketches are tough for your computer. This might help in making a well informed decision.

Best of luck!

3 Likes

Thanks Tiemen!

I am still doing some research, however this article from 2017, sheds some light on integrated graphics cards:
https://www.laptopmag.com/articles/intel-hd-graphics-comparison

I’ll be taking your advice, coding the project first and then seeing what works best.

-a- also as there is lots of your money involved,
you could give the sales people some hard time…

prepare a USB stick with processing
( tested with windows )
you can unzip / install processing incl sketchbook and libraries to a usb stick
http://download.processing.org/processing-3.5.3-windows64.zip
after first start need to change preferences to the usb stick sketchbook.

for linux you just should have the downloaded zip on it too.
http://download.processing.org/processing-3.5.3-linux64.tgz
is it would not run apps from usb??

-b- the idea with YOUR ready sketch is good,
add can use some stress test code.

// kll bench and stress test with sysinfo and numinfo
// OPERATION: key [UP] [DOWN] [s]
// graphic card info only see with P2D P3D renderer selected
// rev 0.6 add mouse present and focus info // disable ( but not delete ) NUM_INFO
// rev 0.7 change from [+][-] to [UP][DOWN] keys for laptop thanks @Tiemen

float rset=500, r; //_ default is 60 FPS
int x = 0;
int w = 500;
int h = 500;
int grid=20, many = grid*grid;
boolean stressenable=true;

void settings() {
  //  size(w, h); // default use JAVA2D 
  //  size(w, h,FX2D);
  //  size(w, h,P2D);
  size(w, h,P3D); //depricated  size(w, h,OPENGL);
}

void setup() {
  frameRate(rset);
  background(200, 200, 0);
  //numinfo();
  sysinfo();
  println("\nstresstest ( "+grid+"*"+grid+" = "+many+" ) points, \nkey [UP][DOWN] grid +-10\nkey [s] disable stress test" );
}

void draw() {
  surface.setTitle("SYS INFO set "+rset+": "+ nf(r, 0, 1)+" FPS" );
  if ( stressenable ) stress();
  r = frameRate;
  plot_fps();
  check_mouse();
}

void plot_fps() {
  if ( r > 30 )      stroke(0, 200, 0); 
  else               stroke(200, 0, 0);
  line(x, height-2, x, height-2-r);            // FPS graph
  x++;
  if ( x > width ) { 
    x = 0; 
    background(200, 200, 0);
  }
}

void stress() {
  push();
  for ( int i=0; i<grid; i++) {
    for ( int j=0; j<grid; j++) {
      stroke(random(255), random(255), random(255) );
      point(5+i, 5+j);
    }
  }  
  pop();
}

boolean mousePresent=false;

public void mouseExited() {
  mousePresent = false;
}

public void mouseEntered() {
  mousePresent = true;
}

void check_mouse() {
  push();
  fill(0,0,200);
  rect(width-110,0,110,20);
  fill(200);
  if ( mousePresent && focused ) text("focus + mouse",width-100,15);
  else if ( mousePresent )       text("mouse",width-100,15);
  else if ( focused )            text("focus",width-100,15);
  pop();
}

void sysinfo() {
  println( "__SYS INFO :");
  println( "System     : " + System.getProperty("os.name") + "  " + System.getProperty("os.version") );// + "  " + System.getProperty("os.arch") );
  println( "JAVA       : " + System.getProperty("java.home")  + " rev: " +javaVersionName);
  //println( System.getProperty("java.class.path") );
  //println( "\n" + isGL() + "\n" );
  println( "OPENGL     : VENDOR " + PGraphicsOpenGL.OPENGL_VENDOR+" RENDERER " + PGraphicsOpenGL.OPENGL_RENDERER+" VERSION " + PGraphicsOpenGL.OPENGL_VERSION+" GLSL_VERSION: " + PGraphicsOpenGL.GLSL_VERSION);
  println( "user.home  : " + System.getProperty("user.home") );
  println( "user.dir   : " + System.getProperty("user.dir") );
  println( "user.name  : " + System.getProperty("user.name") );
  println( "sketchPath : " + sketchPath() );
  println( "dataPath   : " + dataPath("") );
  println( "dataFile   : " + dataFile("") );
  println( "frameRate  : target "+nf(rset, 0, 1)+" actual "+nf(r, 0, 1));
  println( "canvas     : width "+width+" height "+height+" pix "+(width*height));
}

void numinfo() {
  println( "__NUM INFO :");
  println( "byte     "+Byte.SIZE+  " bit | min: "+Byte.MIN_VALUE+   "\t\t\t max: "+Byte.MAX_VALUE);
  println( "short   "+Short.SIZE+  " bit | min: "+Short.MIN_VALUE+  "\t\t\t max: "+Short.MAX_VALUE);
  println( "int     "+Integer.SIZE+" bit | min: "+Integer.MIN_VALUE+"\t\t max: "  +Integer.MAX_VALUE);
  println( "long    "+Long.SIZE+   " bit | min: "+Long.MIN_VALUE+   "\t max: "    +Long.MAX_VALUE);
  println( "float   "+Float.SIZE+  " bit | min: "+Float.MIN_VALUE+  "\t\t\t max: "+Float.MAX_VALUE);
  println( "double  "+Double.SIZE+ " bit | min: "+Double.MIN_VALUE+ "\t\t\t max: "+Double.MAX_VALUE);
}

void keyPressed() {
  if ( key != 's' && keyCode != UP && keyCode != DOWN ) println("key "+key+" keyCode "+keyCode);
  if ( key == 's' ) stressenable = ! stressenable;
  if ( keyCode == UP ) {
    grid +=10;
    many = grid*grid;
    println("stresstest ( "+grid+"*"+grid+" = "+many+" ) points" );
  }
  if ( keyCode == DOWN ) {
    grid -=10;
    grid = constrain(grid,0,height);
    many = grid*grid;
    println("stresstest ( "+grid+"*"+grid+" = "+many+" ) points" );
  }
}

how to compare ?
note at what GRID setting FPS under 30 ( red )
here get red lines:

stresstest ( 180*180 = 32400 ) points
here means
 budget Desktop PC:
 system: WIN 10 Pro
 mb : Gigabyte B450M DS3H 
 cpu: AMD Ryzen 5 3600 
 gpu: Nvidia GT 1030 
 ram: Corsair Vengeance LPX DDR4 2666 C16 1x8GB 
 ssd: SanDisk Ultra II 120GB

2 Likes

This is a great Idea!

As of now I had to abandon the whole laptop direction. I ended getting a Cyberton Prebuilt - desktop - the SET; it ended up being a sweet deal and in my budget.