You could use the debugger to achieve this. The debugger can be exposed to 
Javascript, as seen in test/mjsunit/debug-step*.js tests. Since you are 
even in full control of the code, you could even just insert a debugger 
statement at the end of each javascript statement.

Not sure how easy this mechanism would be exploitable from within the game 
though :)

Yang

On Friday, August 29, 2014 12:47:24 AM UTC+2, Ben Noordhuis wrote:
>
> On Thu, Aug 28, 2014 at 11:18 PM, Alex Barry <[email protected] 
> <javascript:>> wrote: 
> > Hi, 
> > 
> > I'm new to embedding v8 in C++, but haven't tried to do more low-level 
> > javascript processing. 
> > 
> > So, to explain what I want to do, I'm developing a game where the user 
> > interface uses javascript extensively to communicate to a server, but I 
> want 
> > to intentionally throttle how much gets executed per cycle, where the 
> player 
> > can upgrade this feature to get more commands executed per cycle.  The 
> > players will be able to create custom javascript functions, as well, so 
> I 
> > can't just limit this in javascript itself, since they would be able to 
> > circumvent this, so I know I have to do this in C++ instead. 
> > 
> > Is this possible?  Any examples I've seen of libv8 seem to be very 
> > high-level, and don't expose some of the low-level control of how often 
> the 
> > javascript is executed per cycle. 
> > 
> > Also, if possible I want to be able to guarantee that timeout/time 
> specific 
> > functions still work as expected, so I know it's not just an issue of 
> > limiting the number of steps per delta time of execution, since this 
> will 
> > cause the timing functions in JS to be at least inaccurate, if not 
> > completely wrong. 
> > 
> > So, I guess there are a few things I could try (not sure how to do all 
> of 
> > them, though): 
> > 
> > 1. Limit the number of executions per cycle, which may compromise any 
> > javascript timing functions. 
> > 2. Attempt to queue javascript lines of code as they are executed. 
> > 3. Limit the javascript vm's resouces so it forcibly chokes itself out, 
> and 
> > adjust this as the player upgrades himself in the game. 
> > 
> > I'm not sure which of these are possible, if any at all. 
> > 
> > Any insight or suggestions would be great! 
> > 
> > Thanks, 
> > -Alex 
>
> I don't think what you want is possible as such.  V8 has an API for 
> interrupting executing JS code called v8::Isolate::RequestInterrupt() 
> that you could abuse to suspend running code but your other 
> requirement, that timers keep working, seems pretty much impossible. 
>
> Imagine a script that executes `for (;;);`.  An infinite loop never 
> yields control back to the embedding application so there is no 
> opportunity to process expired timers.  You can forcibly interrupt the 
> script from another thread using the aforementioned API but it's not 
> safe to call into the VM again when it's interrupted. 
>

-- 
-- 
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users
--- 
You received this message because you are subscribed to the Google Groups 
"v8-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to