Mark unreachable blocks as processed

Summary: So that we can properly assert that a block only has unprocessed
predecessors when loops are enabled.  In a last minute change to
D1578127, I made an assert more strict but it's now firing in wholecfg
with unreachable blocks.

Reviewed By: @alexmalyshev, @bertmaher

Differential Revision: D1580786
Add SugarCRM to runner

Summary: Reproduction of the widely shared benchmark. We do poorly, but it's not representative of real load.

Reviewed By: @ptarjan

Differential Revision: D1576538
Add various ParamCoerceModeFalse flags

Summary: Fixes 87 Zend tests
Closes https://github.com/facebook/hhvm/pull/3762

Reviewed By: @ptarjan

Differential Revision: D1558103
xenon: use fixed size arrays

Reviewed By: @jano

Differential Revision: D1479916
Convert array to HNI

Summary: #fixes 3648

array_multisort has not been moved to HNI because it requires mixed variadic arguments, which is currently not supported by HNI.

Reviewed By: @ptarjan

Differential Revision: D1551812
Objprof Profiler (Version2: Instance Tracking)

Summary: Objprof Profiler (Version2: Instance Tracking)

The main features of this version:
* No more noise
* Sizes for objects

API:
objprof_start - strats tracking instantiation/freeing of ObjectData* using ObjectTracker::get() (thread local).
objprof_get_data - gets a snapshot of current tracked instances, total sum of bytes and count.

Actual scan of properties is using the to_array function of ObjectData (same one that is used for serialization).

PHP will periodically call "objprof_start" and at the end of the request / at some checkpoints will call "objprof_get_data".
the PHP dataset (perfpipe_objprof) will have an additional column of "State" that could have a short state description such as "outlier_mem_p99", "random" or "before_oom".

(since all tests pass and phabricator sev prevents sandcastle from building, after talking with@ptarjan I'm trying to override the unit tests and attempt arc land again)

Reviewed By: @markw65

Differential Revision: D1541503
improvements to hphp/tools/out2expectf.py

Summary: I found these changes in my tree on my old devserver and I think they're good to have

Reviewed By: @JoelMarcey

Differential Revision: D1581913
Fix Memcached::(inc|dec)rement(ByKey)? when ASCII protocol is used

Summary: We weren't correctly dispatching to the right memcached_* function,
causing it to always fail when using the ascii protocol. There's still one
divergence from PHP5: if an initial_value is given but the connection is using
the acsii protocol, PHP will raise a warning and return false, but we'll
silently ignore the initial value and continue on with the increment. Details
are in the comment.

Closes https://github.com/facebook/hhvm/issues/3839

Reviewed By: @ptarjan

Differential Revision: D1579907
Stop returning systemlib data in Reflection

Summary: I removed a slow test, because I copied it and added more function to test on.

Fixes #3852
Closes https://github.com/facebook/hhvm/pull/3857

Reviewed By: @ptarjan

Differential Revision: D1580841
Typing of multi-argument array_filter

Summary: This is the same as single argument one, except it doesn't remove the nullability from the value type.

Reviewed By: @jwatzman

Differential Revision: D1575720
Improve Result creation in HHVM

Summary: Most of our users (from conversions) still get the result as a Vector of Maps, this was super slow. But it is the easiest way for them to access the results. With this diff, we should probably gain perf and memory in the existing code that uses the map. We are no longer duplicating the strings.

Major optimization but simple! Each time we pass to map a `const char*`, it actually creates a HPHP::String. We don't actually want this! We want it to ref the only one copy of the fields, we actually have only one copy in the C++ side, but the extension doesn't.
Ref: diffusion/FBCODE/browse/master/hphp/runtime/base/type-string.h$133-137,160-163

Adding FieldIndex class, which holds the HPHP::String for each column. This way even using our slow buildRows, we won't have the duplication by simply passing HPHP::String around.
Sometimes we don't have RowFields, because the query is empty, or doesn't have this kind of result :). I preferred to still instantiate FieldIndex just to avoid having a shared_ptr that is nullptr.

Removing some duplicated code and putting the field interpretation in one place.

Adding `at` to MysqlRow so users of this interface don't need to make a call saying the type of the field, but just getting a mixed. The goal with this was to have a simple interface for MysqlRow so the acceptance would be bigger.

Some naming conversions are inconsistent here, but I'll leave to fix them later.

Reviewed By: @chipturner

Differential Revision: D1570690
xenon: move into its own directory, cleanups

Summary: - move into runtime/ext/xenon
- add 'noexcept', 'const' where appropriate
- migrate from 'static' to anonymous namespace
- final class xenon
- 'override' on inherited virtuals

Reviewed By: @jano

Differential Revision: D1581855
remove async stacks from xenon

Reviewed By: @jano

Differential Revision: D1582160
Fix spelling of IMAGICK_COLOR enum

Summary: Not important, but it looks silly

Reviewed By: @alexmalyshev

Differential Revision: D1580239
Enable static polymorphism where safe.

Reviewed By: @jwatzman

Differential Revision: D1568599
Fix a leak in HNI ActRec functions

Summary: They don't free their extraArgs. Since the main reason
for using an ActRec function is to allow extra arguments, this
seems like it might be quite common.

Reviewed By: @edwinsmith, @jdelong

Differential Revision: D1580527
ArrayUtil::RegularSortUnique(): pre-allocate array based on unique count

Reviewed By: @elgenie

Differential Revision: D1580109
Add delay timing knobs to throughput performance benchmark driver.

Change the plumbing so that the $options are pushed around more uniformly
into the workers' constructors, and use properties from the $options
directly.

Add various knobs to control delays before/after most sub-process
launches, delays waiting for responses from the server, delays on the
fcgi channel, and the like. These knobs are reflected as command line
arguments to perf.php. The chosen default values seem plausible or
are historical.

These knobs have proven necessary to support slower systems, or a hhvm
UUT that is itself compiled for debugging or coverage, or is profiling
the PHP being executed.

Add knobs to:
  * override the temporary directory name;
  * plumb subprocess output to files, as using pipes leads to deadlock;
  * trace the subprocess invocations.

If these delay knobs are used, then issue a warning message that
the timing results are unsuitable for benchmark comparisons.

Make changes for hack style guide:
  * add , at end of all formal parameter lists, and most actual paramete lists
  * use 80 character lines
  * normalize spacing
  * use 2-space indent for arguments-on-following-lines, rather than cozy style
  * use !== and === preferentially over != and ==

This is a resubmission from scratch, due to a rebase screw up.
This was PR formerly known as:
  https://github.com/facebook/hhvm/pull/3733
  https://reviews.facebook.net/D23265
Add changes to file nginx/n/ginx.conf.in, which missed in previous commit.
Address review feedback and clean up issues found by hh_client.
  * Rename Process::start so as to avoid a method override
  * Be more fussy about nullables.
  * Use float, not double.
  * Shorten names to allow for rational < 80 column lines.
  * Use Class::static_function() invocations.

Rewrite the option consumer to allow for multiple instances
of the flag --hhvm-extra-arguments, as poorlyl handled by getopt.

Construct and make a default tempDir as part of handling options.